タスク スケジューラ (コンカレンシー ランタイム)

ドキュメントのこの部分のトピックでは、コンカレンシー ランタイムのタスク スケジューラの重要な機能について説明します。 タスク スケジューラは、コンカレンシー ランタイムを使用する既存のコードのパフォーマンスを微調整する場合に便利です。

重要

このタスク スケジューラは、ユニバーサル Windows プラットフォーム (UWP) アプリから使用できません。 詳細は、C++ での UWP アプリ用の非同期操作の作成を参照してください。

Visual Studio 2015 以降、ppltasks.h 内の concurrency::task クラスと関連する型では、スケジューラとして Windows ThreadPool が使用されています。 このトピックは、ppltasks.h で定義されている型には該当しなくなりました。 parallel_for などの並列アルゴリズムでは引き続き、既定のスケジューラとしてコンカレンシー ランタイムが使用されます。

ヒント

コンカレンシー ランタイムには既定のスケジューラが用意されているため、アプリケーションにスケジューラを作成する必要はありません。 タスク スケジューラを使用すると、アプリケーションのパフォーマンスを微調整できるため、同時実行ランタイムを初めて使用する場合は、並列パターン ライブラリ (PPL) または非同期エージェント ライブラリから始めることをお勧めします。

タスク スケジューラは、実行時にタスクをスケジュールおよび調整します。 タスクとは、特定のジョブを実行する作業の単位です。 通常、タスクは、他のタスクと並列に実行できます。 タスク グループ項目、並列アルゴリズム、非同期エージェントによって実行される作業はすべて、タスクの例です。

タスク スケジューラは、複数のコンピューティング リソースを持つコンピューター上での効率的なタスクのスケジュール設定に関連する詳細を管理します。 また、タスク スケジューラでは、基になるオペレーティング システムの最新機能も使用されます。 そのため、コンカレンシー ランタイムを使用するアプリケーションは、機能を拡張したハードウェア上で自動的に拡張され、向上します。

プリエンプティブ スケジュール メカニズムと協調スケジュール メカニズムの違いは、他のコンカレンシー モデルとの比較で説明しています。 タスク スケジューラは、処理リソースを最大限活用するために、協調スケジュールとワーク スティーリング アルゴリズムを、オペレーティング システムのプリエンプティブ スケジューラと共に使用します。

コンカレンシー ランタイムには既定のスケジューラが用意されているため、インフラストラクチャの詳細を管理する必要はありません。 そのため、通常は、タスク スケジューラを直接使用しないでください。 ただし、アプリケーションの品質ニーズを満たすために、タスク スケジューラを使用して独自のスケジューリング ポリシーを提供したり、スケジューラを特定のタスクに関連付けたりすることもできます。 たとえば、4 つまでのプロセッサに対応した並列並べ替えルーチンがあるとします。 スケジューラ ポリシーを使用して、4 つ以下の同時実行タスクを生成するスケジューラを作成できます。 このスケジューラで並べ替えルーチンを実行すると、アクティブな他のスケジューラで残りの処理リソースを使用できるようになります。

Title 説明
スケジューラ インスタンス スケジューラ インスタンスと、concurrency::Scheduler クラスと concurrency::CurrentScheduler クラスを使用してスケジューラ インスタンスを使用する方法について説明します。 スケジューラ インスタンスは、明示的なスケジューリング ポリシーを特定の種類のワークロードに関連付ける場合に使用します。
スケジューラ ポリシー スケジューラ ポリシーの役割について説明します。 スケジューラ ポリシーは、スケジューラでタスクを管理する場合に使用される方法を制御するときに使用します。
スケジュール グループ スケジュール グループの役割について説明します。 スケジュール グループは、タスク間で高いレベルの局所性が求められる場合 (たとえば、関連するタスクのグループが同一プロセッサ ノードでの実行によって恩恵を受ける場合) に使用します。
軽量タスク 軽量タスクの役割について説明します。 軽量タスクは、既存のコードを改変してコンカレンシー ランタイムのスケジュール機能を使用する場合に有用です。
コンテキスト コンテキスト、concurrency::wait 関数、および concurrency::Context クラスの役割について説明します。 この機能は、コンテキストのブロック、ブロック解除、および譲渡のタイミングを制御する必要がある場合や、アプリケーションでオーバーサブスクリプションを有効にする場合に使用します。
メモリ管理関数 concurrency::Alloc 関数と concurrency::Free 関数について説明します。 これらの関数を使用すると、同時実行方式でメモリの割り当てと解放が行われるため、メモリ パフォーマンスが向上します。
他のコンカレンシー モデルと比較する プリエンプティブ スケジュール メカニズムと協調スケジュール メカニズムの違いについて説明します。
並列パターン ライブラリ (PPL) アプリケーションで各種の並列パターン (並列アルゴリズムなど) を使用する方法について説明します。
非同期エージェント ライブラリ アプリケーションで非同期エージェントを使用する方法について説明します。
コンカレンシー ランタイム 並列プログラミングを容易にするコンカレンシー ランタイムについて説明します。また、関連トピックへのリンクを示します。