Nat*_*ong 6 erlang process elixir
我正在考虑使用Elixir解决问题,主要是因为能够廉价地产生大量进程.
在我的场景中,我想创建几个"原始"进程,将特定的,不可变数据加载到内存中,然后根据需要复制这些进程.副本都将使用相同的基础数据,但使用它执行不同的只读任务; 例如,想象一个"原始"在记忆中具有"战争与和平"的文本,并且该原始的每个副本对文本进行不同类型的分析.
我的问题:
没有内置的方法来复制进程.最简单的方法是启动"原始"过程和"副本",并将消息中的所有相关数据发送到副本.进程不共享数据,因此没有更有效的方法.将数据放在ETS表中仅部分有助于共享,因为ETS表中的数据在使用时会复制到进程中,但是,您不需要在进程堆中包含所有数据.
Erlang进程除了存储在变量(和进程字典)中之外没有特定于进程的数据,因此要创建进程内存的副本,只需生成一个新进程,将所有相关变量作为参数传递给函数.
通常,进程之间不共享内存; 一切都被复制了.例外情况是ETS表(尽管数据是在进程读取时从ETS表复制的),以及大于64字节的二进制文件.如果您将"War and Peace"存储在二进制文件中,并将其发送到每个工作进程(或在您生成这些工作进程时传递它),那么进程将共享内存,只有在他们想要修改二进制文件时才复制它.有关详细信息,请参阅Erlang效率指南中有关二进制文件的章节.
| 归档时间: |
|
| 查看次数: |
624 次 |
| 最近记录: |