キューは、生産タスクから消費タスクをバッファーするために並列プログラムで広く使用されています。しかし、明示的なキューを使用する前に、代わりに parallel_do または pipeline を使用することを検討してください。これらの操作は、多くの場合、次の理由によりキューよりも効率的です。
FIFO (先入れ先出し) 順を維持しなければならないため、キューは本質的なボトルネックです。
値をポップしているスレッドは、値がプッシュされるまでアイドル状態で待たなければなりません。
キューは受動的なデータ構造です。スレッドが値をプッシュした場合、値をポップするまで時間がかかり、値 (およびその参照) はキャッシュにない「コールド」状態になります。また、さらに悪い状況では、別のスレッドが値をポップし、値 (およびその参照) を別のプロセッサーに移動しなければなりません。
対照的に、parallel_do および pipeline はこれらのボトルネックを回避します。これらのスレッド化は暗黙的であるため、値が現れるまでほかの作業を行うようにワーカースレッドを最適化します。また、キャッシュ上の項目をホットな状態で維持しようとします。例えば、別の作業項目が parallel_do に追加された場合、「ホット」スレッドが項目を処理する前に、使用されていない別のスレッドが項目をスチールできなければ、項目を追加したスレッドに対してローカルなままです。このように、項目はホットスレッドでより多く処理されます。