2015-09-02 2 views
4

Перемешиваются ли атомы из одного процесса в другой, когда я отправляю атом в виде сообщения? Мое мышление состоит в том, что, поскольку этот атом уже существует в VM, не нужно делать копию. Я понимаю, что двоичные файлы более эффективны при отправке из одного процесса в другой.Отправка сообщений между процессами erlang: Atoms vs Binaries

Если я отправляю сообщение триггера, постоянное сообщение от одного процесса к другому, которое лучше использовать: атом или двоичный?

+1

Преждевременная оптимизация == корень всех зол. –

ответ

9

Используйте правильное семантически. В общем, не беспокойтесь о производительности, если вы не тестировали, и вы уверены, что ваш код может извлечь выгоду из оптимизаций. Если вы используете то, что является наиболее правильным семантически, это, вероятно, будет самым быстрым в любом случае.

Было сказано, что является наиболее правильным семантически?

Атомы полезны для пометки или определения терминов, которые являются статическими, которые не будут меняться. Поэтому, если вы хотите сказать, что процесс выполняет какую-то работу, вы можете написать: send(pid, :do_some_work). Тогда другой процесс может легко соответствовать на атоме и выполнять требуемую работу (сравнение с атомами супер быстро).

Однако, если вы передаете динамический контент, то, безусловно, вы хотите использовать двоичные файлы. На самом деле было бы небезопасно преобразовывать двоичные файлы в атомы, а атомы также имеют ограничение по размеру. У вас не может быть атом длиной 1 килобайт.

Наконец, стоит обратить внимание на то, что атомы намного быстрее копируются. Атомы представлены как целые числа, они принимают одно слово. Таким образом, вы копируете только одно слово.

Binaries, даже если они разделены после определенного размера, принимают не менее 3 слов.

Дополнительная информация: Why is useful to have a atom type (like in elixir, erlang)?

Эрланг В.М. Эффективность руководство: http://www.erlang.org/doc/efficiency_guide/advanced.html

Смежные вопросы