3

システムでアクターを使用して一部のストレージをラップすることを検討しています (データベースである可能性があり、メモリ内コレクションである可能性があります)。これを行う理由は、ストアへの呼び出しがそれを呼び出しているコードからブロックされないようにするためであり、大量のメッセージをプッシュするつもりです。

アクターの受信メッセージ キューは、何十万ものメッセージを処理できますか? オブジェクトのメソッドを直接呼び出すコードと、途中にキューを持つアクターを配置することとでは、パフォーマンスにどのような違いがあるでしょうか?

乾杯

ジョー

4

1 に答える 1

4

アクター メールボックスは、変更可能な双方向リンク リストとして実装されたデキューです。サイズは、使用可能なメモリによってのみ制限されます。アクターが処理できる速度よりも多くのメッセージを送信すると、OutOfMemoryError が返されます。

アクターにメッセージを送信すると、メソッドが呼び出されます。メッセージのエンキュー、アクターへの通知、アクターへのスレッドの割り当てなどに関連するオーバーヘッドがあります。そのため、そのメッセージ送信で多くの処理が行われるため、単純な古い同期メソッド呼び出しと比較してかなりの量のオーバーヘッドが発生します。もちろん、メソッドがそこに座ってしばらくブロックすると、少なくとも壁時間だけ遅くなります。

于 2009-09-01T17:48:41.287 に答える