在erlang进程之间发送消息:Atoms vs Binaries

Muz*_*hua 4 erlang mnesia elixir erlang-shell

当我将原子作为信息发送时,原子是否从一个过程复制到另一个过程?我的想法是,因为这个原子已经存在于VM中,所以不必复制.我知道从一个进程发送到另一个进程时二进制文件更有效.

如果我发送一个触发器消息,从一个进程到另一个进程的常量消息,最好使用:atom或binary?

Jos*_*lim 9

使用语义上最正确的.一般情况下,除非您已经进行了基准测试,并且确信您的代码可以从优化中受益,否则不要担心性能.如果你在语义上使用最正确的东西,那么无论如何它可能是最快的.

那就是说,语义上最正确的是什么?

原子用于标记或识别静态的术语,这些术语不会改变.所以,如果你想让一个过程做一些工作,你可以写:send(pid, :do_some_work).然后另一个过程可以很容易地匹配原子并执行所需的工作(与原子比较超快).

但是,如果您要传递动态内容,那么您肯定要使用二进制文件.将二进制转换为原子实际上是不安全的,原子也有大小限制.你不能拥有1千字节长的原子.

最后,值得指出的是原子是最快复制的.原子表示为整数,它们取1个字.所以你只复制了一个字.

二进制文件,即使它们在一定大小后共享,也至少需要3个单词.

更多信息:为什么有一个原子类型很有用(比如elixir,erlang)?

Erlang VM效率指南:http://www.erlang.org/doc/efficiency_guide/advanced.html