2015-09-02 47 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