【问题标题】:Sending messages among erlang processes: Atoms vs Binaries在 erlang 进程之间发送消息:Atoms vs Binaries
【发布时间】:2015-11-27 17:22:41
【问题描述】:

当我将原子作为消息发送时,原子是否从一个进程复制到另一个进程?我的想法是,由于这个原子已经存在于 VM 中,因此不必复制。我知道二进制文件在从一个进程发送到另一个进程时效率更高。

如果我要发送触发消息,即从一个进程到另一个进程的恒定消息,哪个更好用:原子还是二进制?

【问题讨论】:

  • 过早优化 == 万恶之源。

标签: erlang elixir mnesia erlang-shell


【解决方案1】:

使用语义上最正确的内容。一般来说,除非您进行了基准测试并且您确定您的代码可以从优化中受益,否则不要担心性能。如果你使用语义上最正确的东西,无论如何它可能是最快的。

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

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

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

最后,值得指出的是,原子是迄今为止复制速度最快的。原子表示为整数,它们占用 1 个单词。所以你只复制了 1 个字。

二进制文件,即使在一定大小后共享,也至少占用 3 个单词。

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

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

【讨论】:

    猜你喜欢
    • 2014-06-07
    • 2011-08-11
    • 2016-04-30
    • 2019-07-23
    • 2016-04-30
    • 2013-11-23
    • 2020-10-08
    • 2012-09-12
    • 2017-06-11
    相关资源
    最近更新 更多