タスクベースのプログラミングが適切ではない場合

タスクベースのプログラミングが適切ではない場合#

タスク・スケジューラーの使用は、パフォーマンスの向上を目的としたスレッド化のアプローチとしては最も優れた方法ですが、タスク・スケジューラーが適切でない場合もあります。タスク・スケジューラーは、非ブロッキング・タスクから構成されるハイパフォーマンスなアルゴリズムを対象としています。タスクがほとんどブロックされない場合でも機能します。ただし、スレッドが頻繁にブロックされると、スレッドがブロックされている間はどのタスクも実行されないため、タスク・スケジューラーを使用するとパフォーマンスが低下します。ブロッキングは通常、I/O またはミューテックスを長時間待機している間に発生します。1つのスレッドが長い間mutexを保持する場合、他に多くのスレッドがあったとしてもコードのパフォーマンスは向上しません。ブロックタスクがある場合は、必要な条件を備えたスレッドを使用するとよいでしょう。タスク・スケジューラーは、開発者が作成したスレッドと oneAPI スレッディング・ビルディング・ブロック (oneTBB) のタスクを安全に混在使用できるように設計されています。