FIFO(スレッドセーフなもの)にアイテムが追加されているとしましょう(方法は気にしません)
|__| |
| | |
|__| |
| | |
|__| V
| d|
|__|
| c|
|__|
| b|
|__|
| a|
ここで、アイテムを (1 つずつ) 別の並行コレクションに挿入する必要があるとしましょう。
データ挿入の速度は動的です。
最速でやりたい。(すべての要素を から に転送しますFifo
) collection
。
しかし、私は競合しています:
1 つのスレッドを使用して からアイテムを引き出し、
Fifo
に挿入することができましたcollection
。しかし、私は私を助けることができるコア/他のスレッドを使用しません。複数のコンシューマー スレッドを使用して から項目を取得できます
Fifo
が、Fifo
(読み取り時) の内部ロックとcollection
(書き込み時) の内部ロックにより、最終的にパフォーマンスが低下する可能性があります。
つまり、大量のコンシューマ スレッドがある場合、fifo/コレクションによる膨大な内部ロックに加えて、多数のコンテキスト スイッチングが発生する状況が発生します。
この種の問題に正しい方法でアプローチするにはどうすればよいですか? ガイドラインは何ですか?