在Erlang / Elixir中的进程之间发送大列表

时间:2017-01-26 09:31:48

标签: erlang elixir message-passing

假设您要向Erlang / Elixir中的其他进程发送一个大列表(例如1_000_000个条目)。

  • send阻止整个列表的数据发送,还是由Erlang VM以某种方式异步完成?
  • 简单地发送列表是不好的做法?有什么选择?

1 个答案:

答案 0 :(得分:3)

  • 是和否。复制巨大的结构不会阻止接收者而是发送者。有关类似问题,请参阅my answer
  • 是的,如果你经常这样做,这是不好的做法。或者:
    1. 重构代码,以便将数据分区到不同的进程。
    2. 将数据存储在ets中。 (这不是一个神奇的子弹,你仍然可以将数据复制进出ets,但这取决于你的访问模式。)
    3. 将数据存储为二进制文件。

这取决于你做了什么。你不应该在一个进程中有一个大堆,所以你可能应该重构你的代码。