多くのスレッドがコレクションを共有する必要があり、スレッドがコレクションに書き込みを続けるシナリオがあります。比較的書き込みが多く、読み取りが非常に少ないため、ArrayBlockQueue が使用される正しいコレクションであるかどうかはわかりません。独自のコレクションを実装する必要がありますか?それとも Box in Java から何かを取得する必要がありますか?
助けてください。
多くのスレッドがコレクションを共有する必要があり、スレッドがコレクションに書き込みを続けるシナリオがあります。比較的書き込みが多く、読み取りが非常に少ないため、ArrayBlockQueue が使用される正しいコレクションであるかどうかはわかりません。独自のコレクションを実装する必要がありますか?それとも Box in Java から何かを取得する必要がありますか?
助けてください。
それはあなたが「コレクション」に何を求めるかによります。
その名前が示すように、ArrayBlockingQueue はブロッキング キューです。コレクションに大量のデータを保存して読み取るだけで、プット/テイク操作をブロックする操作を使用しない場合、ArrayBlockingQueue はおそらく同期された ArrayList と何ら変わりはありません。コレクションを何のために使用しているかをもう一度考えてください。
Java は、ConcurrentLinkedQueue などのロックのないコレクションをいくつか提供しました。BlockingQueue を探していない場合は、これらのコレクションによってパフォーマンスが向上する可能性があります。
一般に、「シングル ライターの原則」に従うシステムは、より優れたパフォーマンスを得ることができます。並行コレクションは複数のライターをサポートしますが、代わりに各スレッドに独自のコレクションへの書き込みを許可し、リーダーが各コレクションを処理すると、競合が少なくなり、スループットが向上する可能性があります。
最初にArrayBlockingQueueとDisruptorのコードを読むことをお勧めします。もっとうまくやれると思うなら、自分で書くかもしれません。