在Erlang中,是否可以将正在运行的进程发送到其他节点?

Mat*_*ers 6 erlang agent actor mobility

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

I G*_*ERS 10

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

还有其他一些注意事项:该过程可能正在使用其数据不存在于另一个节点上的ETS表,或者它可能已在过程字典中存储了内容(从随机模块中可以看到状态).


Erlang的普遍共识是,流程不会动员在机器之间移动.相反,如果节点死亡,则可以安排在节点之间接管应用程序.或者为了分发系统,所以数据已经分发到另一台机器.在任何情况下,在发生错误时使状态持久的主要问题仍然存在,移动性与否 - 并且分发是解决持久性问题的好工具.