在 erlang 进程之间发送消息:Atoms vs Binaries
Sending messages among erlang processes: Atoms vs Binaries
当我将原子作为消息发送时,原子是否从一个进程复制到另一个进程?我的想法是,因为这个原子已经存在于 VM 中,所以不必制作副本。我知道二进制文件在从一个进程发送到另一个进程时效率更高。
如果我要发送一个触发消息,一个从一个进程到另一个进程的常量消息,使用哪个更好:atom 还是 binary?
使用语义上最正确的内容。一般来说,不要担心性能,除非您进行了基准测试并且您确定您的代码可以从优化中受益。如果您使用语义上最正确的内容,它可能无论如何都是最快的。
也就是说,语义上最正确的是什么?
原子对于标记或识别静态的、不会改变的术语很有用。所以如果你想告诉一个进程做一些工作,你可以写:send(pid, :do_some_work)
。然后其他进程可以很容易地匹配到原子上并执行所需的工作(与原子相比超级快)。
但是,如果您要传递动态内容,那么您肯定想使用二进制文件。将二进制文件转换为原子实际上是不安全的,而且原子也有大小限制。您不能拥有 1 KB 长的原子。
最后,值得指出的是,原子是迄今为止复制速度最快的。原子表示为整数,它们占用 1 个字。所以你只复制了 1 个单词。
二进制文件,即使在一定大小后共享,也至少需要 3 个单词。
更多信息:
Erlang VM 效率指南:http://www.erlang.org/doc/efficiency_guide/advanced.html
当我将原子作为消息发送时,原子是否从一个进程复制到另一个进程?我的想法是,因为这个原子已经存在于 VM 中,所以不必制作副本。我知道二进制文件在从一个进程发送到另一个进程时效率更高。
如果我要发送一个触发消息,一个从一个进程到另一个进程的常量消息,使用哪个更好:atom 还是 binary?
使用语义上最正确的内容。一般来说,不要担心性能,除非您进行了基准测试并且您确定您的代码可以从优化中受益。如果您使用语义上最正确的内容,它可能无论如何都是最快的。
也就是说,语义上最正确的是什么?
原子对于标记或识别静态的、不会改变的术语很有用。所以如果你想告诉一个进程做一些工作,你可以写:send(pid, :do_some_work)
。然后其他进程可以很容易地匹配到原子上并执行所需的工作(与原子相比超级快)。
但是,如果您要传递动态内容,那么您肯定想使用二进制文件。将二进制文件转换为原子实际上是不安全的,而且原子也有大小限制。您不能拥有 1 KB 长的原子。
最后,值得指出的是,原子是迄今为止复制速度最快的。原子表示为整数,它们占用 1 个字。所以你只复制了 1 个单词。
二进制文件,即使在一定大小后共享,也至少需要 3 个单词。
更多信息:
Erlang VM 效率指南:http://www.erlang.org/doc/efficiency_guide/advanced.html