2015-09-02 44 views
4

当我发送原子作为消息时,原子是否从一个进程复制到另一个进程?我的想法是,因为这个原子已经存在于虚拟机中,所以不需要复制。我知道二进制文件在从一个进程发送到另一个进程时效率更高。在erlang进程中发送消息:原子vs二进制文件

如果我发送触发消息,从一个进程到另一个常量消息,哪个更好用:atom还是binary?

+1

过早的优化==万恶之源。 –

回答

9

使用什么是最正确的语义。一般来说,不要担心性能,除非您已经进行了基准测试,并且您确信您的代码可以从优化中受益。如果你使用最正确的语义,它可能会是最快的。

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

原子对于标记或识别静态不变的术语很有用。所以如果你想告诉一个过程做一些工作,你可以写:send(pid, :do_some_work)。然后另一个过程可以很容易地在原子上匹配并执行所需的工作(与原子的比较速度非常快)。

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

最后,值得指出的是,原子到目前为止是复制速度最快的。原子被表示为整数,它们需要1个字。所以你只复制一个字。

即使二进制文件在特定大小之后共享,也需要至少3个单词。

的更多信息:Why is useful to have a atom type (like in elixir, erlang)?

Erlang的虚拟机效率指南:http://www.erlang.org/doc/efficiency_guide/advanced.html