dispatchers in Akka 2の相違点や推奨される使い方を理解することができませんでした。私はBalancingDispatcherとCallingThreadDispatcherのふるまいを理解していると思いますが、私はDispatcherとPinnedDispatcherについて考えていません。Akka 2のディスパッチャの違いと使用パターンは何ですか?
Sharability
とBulkheading
のどちらの概念もわかりません。
dispatchers in Akka 2の相違点や推奨される使い方を理解することができませんでした。私はBalancingDispatcherとCallingThreadDispatcherのふるまいを理解していると思いますが、私はDispatcherとPinnedDispatcherについて考えていません。Akka 2のディスパッチャの違いと使用パターンは何ですか?
Sharability
とBulkheading
のどちらの概念もわかりません。
私は、共有可能性は、特定のタイプのディスパッチャーを共有できるアクターの数/タイプを指していると思います。私はバルクヘッドではわかりませんが、それはあるアクターがスレッドを「所有する」ようにする何らかのアクターパーティショニングを指していると仮定するつもりです。
ここには、さまざまなディスパッチャタイプのcode/scaladocコメントの説明があります。必要に応じてより多くの明確化がある場合は、不明であるかを説明してください:
ディスパッチャ:
イベントベースDispatcher
はBlockingQueue
によってバックアップされたスレッドプールへのアクターのセットをバインドします。
BalancingDispatcher:
俳優をアイドル状態に多忙な俳優から作業を再配布しようとしますキュータベースのイベント駆動型ディスパッチャ。このディスパッチャの同じインスタンスを使用するすべてのアクタが、アクタの1つに送信されたすべてのメッセージを処理できると仮定します。私。アクターはアクターのプールに属し、クライアントには実際にどのアクターインスタンスが特定のメッセージを処理するかについての保証はありません。
この実装で使用されている技術は一般的に「仕事盗難」として知られていますが、実際の実装はおそらく「仕事寄付」として最もよく記述されています。
PinnedDispatcher:
は参照として渡された各アクターのためのユニークなスレッドを努力しています。そのmessageQueueによって提供されます。 (akka.testkitで)
CallingThreadDispatcher:のみ、現在のスレッド上で呼び出しを実行
ディスパッチャ。このディスパッチャは新しいスレッドを作成しませんが、同じアクタに対して異なるスレッドから同時に使用できます。ディスパッチ戦略は、対象のアクタが中断されているか、または現在のスレッドで既に実行されている場合を除いて、現在のスレッドで実行されます(別のスレッドで実行されている場合は、呼び出しが実行されない場合、呼び出された呼び出しは、呼び出された呼び出しがさらに終了すると実行されるスレッドローカルキューに入れられます。これにより、1つのスレッドのみが使用されている場合、完全に確定的な実行順序になります。
一時停止と再開は、1つのアクタのグローバルアクションです。つまり、異なるスレッドに影響する可能性があり、複雑になります。中断している期間中にメッセージがキューに入れられた場合(スレッドローカル)、再開時にメッセージを実行するスレッドは、実際にresumeメソッドを呼び出すスレッドだけです。したがって、現在排水されていないすべてのスレッドローカルキュー(suspend-queue-resumeは別のスレッドでの呼び出し中に完全に発生する可能性があるため)は、現在実行されているスレッドローカルキューに汲み上げられて実行されます。コールスタック内からアクタを中断することは可能です。
デフォルトの実装はDispatcherです。
PinnedDispatcherにはアクターごとに1つのスレッドがあるため、スレッドはアクターに固定されます。
共有可能性とは、複数のアクターが同じディスパッチャインスタンスを使用する場合に適用される制限を意味します。
バルクヘッドイングは、セクションをお互いから隔離することを意味します。according to Wikipedia。