マルチプロセッシング用のアプリケーションで akka を使用したいと考えています。したがって、同じコード ブロックが各アクターによって実行され、結果がリスナーによって集計されます。したがって、私の質問は、この場合、同期の問題があるかどうかです。そうでない場合は、内部で akka アクターによってどのように処理されていますか。
1 に答える
0
デフォルトでは、アクターのアプローチを厳密に尊重する場合、同期の問題は発生しません。つまり、アクターは、不変オブジェクトを含むメッセージのみを使用して通信する必要があり、アクターの内部状態を外部の世界に直接公開しないでください。受信したメッセージに反応するだけで、内部状態を変更可能/読み取り可能にします。
各アクターは、独自の ExecutionContext で実行されます。これは、各アクターが独自のプライベート ステートを持っていることを意味します。Akka アクターは、「外界」からこの内部状態にアクセスすることが基本的に不可能 (または非常に難しくなる) ように設計されています。これは、新しい Actor を作成した後は、Actor への中間参照 (ActorRef インスタンス) しか持たないためです。メモリ内の実際の Actor インスタンスへの参照ではありません。開発者が実際の参照を取得し、そのプロパティに直接アクセスすることは難しくなります。これは、アクターのアプローチを壊すことになります。
一方、共有可変オブジェクトをアクターに渡す場合、たとえばスレッドを使用する場合と同様に、ロックと同期に関するすべての問題が発生します。
于 2013-08-19T19:35:42.563 に答える