私はモバイル エージェントを研究しており、実行中のプロセスを erlang の別のノードに送信できるかどうか疑問に思っていました。別のノードのプロセスにメッセージを送信できることを知っています。クラスター内のすべてのノードにモジュールをロードできることを知っています。特定のノードで何らかの状態にある可能性のあるプロセスを別のノードに移動して、その状態を再開することは可能ですか? つまり、erlang は強力なモビリティを提供しますか? それとも、erlang で強力なモビリティを提供することは可能ですか?
質問する
1819 次
1 に答える
11
はい、可能ですが、「プロセスをノードに移動」呼び出しはありません。ただし、プロセスが移行機能を使用して構築されている場合は、プロセスの機能とその状態を別のノードに送信し、そこでスポーンを手配することで、確実に移行できます。プロセスのIDを正しく取得するには、プロセスがpidを変更するため、グローバルプロセスレジストリまたはgprocのいずれかを使用する必要があります。
他にも考慮事項があります。プロセスは、データが他のノードに存在しないETSテーブルを使用しているか、プロセスディクショナリにデータを格納している可能性があります(ランダムモジュールの状態が思い浮かびます)。
Erlangの一般的なコンセンサスは、プロセスがマシン間を移動するために動員されていないということです。むしろ、ノードが停止した場合にノード間でアプリケーションを引き継ぐように手配します。または、システムの配布用に、データがすでに別のマシンに配布されているようにします。いずれにせよ、エラーが発生した場合に状態を永続化するという主な問題は、モビリティであるかどうかにかかわらず、分散は永続性の問題を解決するための優れたツールです。
于 2011-02-27T20:54:29.477 に答える