process - Elixir/Erlang可以复制一个进程,包括它的内存吗?

标签 process erlang elixir

我正在考虑使用Elixir解决问题,主要是因为能够廉价地生成大量进程。

在我的场景中,我想创建几个“原始”进程,将特定的,不可变的数据加载到内存中,然后根据需要制作这些进程的副本。这些副本将全部使用相同的基础数据,但对其执行不同的只读任务;例如,假设一个“原始”文本在内存中包含“ war 与和平”文本,并且该原始文本的每个副本都对该文本进行了不同类型的分析。

我的问题:

  • 是否可以在Elixir/Erlang VM中复制现有进程,内存内容以及所有内容?
  • 如果是这样,每个副本是否会像原始文件一样消耗大量内存,或者它们可以共享内存?就像Unix进程使用“写时复制”策略一样吗? (并且在这种情况下,将不会进行后续写入。)
  • 最佳答案

    没有内置的方法来复制进程。最简单的方法是启动“原始”过程和“副本”,并将消息中的所有相关数据发送到副本。流程不共享数据,因此没有更有效的方式来处理数据。将数据仅部分地放入ETS表中有助于共享,因为使用时将ETS表中的数据复制到流程中,但是,您不需要将所有数据都放在流程堆中。

    关于process - Elixir/Erlang可以复制一个进程,包括它的内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29033361/

    相关文章:

    linux - session 断开后如何重新连接到后台 GUI 应用程序?

    c++ - 关闭控制台时如何正确处理 SIGBREAK?

    erlang - 在 Erlang 梁上使用 Dialyzer 和源代码之间有效率差异吗?

    elixir - 将 phoenix 框架中日期选择器的默认值设置为当前日期

    c - 先执行父进程再执行子进程,反之亦然

    ruby - 短期降低自身优先级,然后再提高

    elixir - 如何将 RethinkDB 与 Phoenixframework 一起使用?

    elixir - 如何在运行时配置 Ecto?

    ssl - 获取 APNS 套接字时遇到不匹配 key 文件错误

    Erlang store 初始应用配置