erlang - 在 Erlang 中,是否可以将正在运行的进程发送到不同的节点?

标签 erlang actor agent mobility

我一直在研究移动代理,想知道是否可以将正在运行的进程发送到 erlang 中的另一个节点。我知道可以向另一个节点上的进程发送消息。我知道可以在集群中的所有节点上加载模块。是否可以将可能在特定节点上处于某种状态的进程移动到另一个节点并恢复它的状态。也就是说,erlang 是否提供了强大的移动性?或者是否有可能在 erlang 中提供强大的移动性?

最佳答案

是的,这是可能的,但没有“将进程移动到节点”调用。但是,如果进程构建了迁移功能,您当然可以通过将进程的功能及其状态发送到另一个节点并在那里安排生成来实现。要正确识别进程,您需要使用全局进程注册表或 gproc,因为进程会更改 pid。

还有其他注意事项:该进程可能正在使用一个 ETS 表,其数据不存在于另一个节点上,或者它可能在进程字典中存储了一些内容(想到来自 random 模块的状态)。

Erlang 的普遍共识是进程不会在机器之间移动。相反,如果节点死亡,要么安排接管节点之间的应用程序。或者用于系统的分发,因此数据已经分发到另一台机器。无论如何,在发生错误时使状态持久化的主要问题仍然存在,移动性与否 - 分发是解决持久性问题的好工具。

关于erlang - 在 Erlang 中,是否可以将正在运行的进程发送到不同的节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5135598/

相关文章:

concurrency - 使用代理同步作业

concurrency - Erlang消息接收顺序

scala - 如何在 Scala 中为具有构造函数参数的 Actor 创建 TestActorRef?

erlang - 如何更新ets bag中的数据?

ruby - 如何使用 Celluloid 从线程池运行 HTTP 请求?

c++ - Actor 模型 : Why is Erlang/OTP special? 你能用另一种语言吗?

azure-pipelines - 在 Azure 管道作业之间共享文件

deadlock - jvmti代理死锁

erlang - 如何在 Nitrogen 中使用 html 列表

multithreading - 其他语言的 Erlang 风格并发