18

ArrayBlockingQueueほとんどの場合、 はよりも優れたパフォーマンスを発揮すると思いますLinkedBlockingQueue。ただし、それは配列に常に十分なスペースがある場合です...配列がいっぱいになると、データをキューにプッシュしようとしているスレッドがブロックされるため、うまく機能するかどうかはあまり予測できません.. .

だから、私の質問は次のとおりです。中間の実装はありBlockingQueueますか? と言っArrayListBlockingQueueBucketListBlockingQueueください。配列のリストのようなもので、最終的にデータを格納するために配列を使用することによる合理的な利点を維持しながら、キューの容量を動的に増やすことができますか?

4

2 に答える 2

8

私の2セント:

まず第一に、ここでの結論は、単純な LinkedBlockingQueue を使用している場合でも、いくつかのマイクロ秒レベルのシステムを提供している場合はパフォーマンスが十分に優れているため、ここでの違いはあまり気にしないということです。したがって、ここでのパフォーマンスの違いはそれほど大きくありません。

ミッション クリティカルな高性能システムを作成していて、スレッド間でメッセージを渡すためにキューを使用している場合、[キュー サイズ] = [最大許容遅延] * [最大メッセージ レート] によって必要なキュー サイズをいつでも見積もることができます。そのような容量を超えて成長する可能性があるということは、遅い消費者の問題に悩まされることを意味します. ミッション クリティカルなアプリケーションでは、このような遅延はシステムの誤動作を意味します。システムが適切に動作していることを確認するために、いくつかの手動プロセスが必要になる場合があります。

システムがミッション クリティカルでない場合は、一部のコンシューマーが使用可能になるまでパブリッシャーを一時停止 (ブロック) できます。

于 2013-07-04T04:36:53.067 に答える