2011-02-27 43 views
6

我一直在研究移動代理,並想知道是否有可能將正在運行的進程發送到erlang中的另一個節點。我知道可以在另一個節點上發送一個進程消息。我知道可以在羣集中的所有節點上加載模塊。是否有可能將某個特定節點上處於某種狀態的進程移動到另一個節點並恢復其狀態。也就是說,erlang是否提供了強大的移動性?或者是否有可能在erlang中提供強大的移動性?在Erlang中,是否可以將正在運行的進程發送到其他節點?

回答

10

是的,這是可能的,但沒有「移動進程到節點」調用。但是,如果該流程是使用遷移功能構建的,那麼您可以通過將流程的功能及其狀態發送到另一個節點並在那裏安排產卵來做到這一點。要獲得流程權限,您需要使用全局流程註冊表或gproc,因爲流程將更改爲pid

還有其他一些考慮因素:該過程可能使用的是其他節點上不存在數據的ETS表,或者它可能在過程字典中存儲了內容(來自隨機模塊的狀態)。


Erlang的普遍共識是流程不會在機器之間移動。相反,如果節點死亡,則要麼安排節點之間應用的應用接管。或者爲了分配系統,數據已經被分配給另一臺機器。無論如何,出現錯誤時使狀態保持不變的主要問題仍然存在,移動性與否 - 分發是解決持久性問題的好工具。

相關問題