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