次の方法で共有


スケジュール グループ

ここでは、同時実行ランタイムでのスケジュール グループの役割について説明します。スケジュール グループは、関連するタスクの関係付け (グループ化) を行います。各スケジューラは、1 つ以上のスケジュール グループを使用します。関連するタスクのグループが同一プロセッサ ノードでの実行によって恩恵を受ける場合など、タスク間で高いレベルの局所性が求められる場合は、スケジュール グループを使用します。一方、一連のタスクに割り当てられる処理リソースの量を制限する場合など、アプリケーション固有の品質要求がある場合は、スケジューラ インスタンスを使用します。スケジューラ インスタンスの詳細については、「スケジューラ インスタンス」を参照してください。

ヒントヒント

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

すべての Scheduler オブジェクトには、すべてのスケジューリング ノード用の既定のスケジュール グループがあります。スケジューリング ノードは、基になるシステム トポロジにマップされます。ランタイムは、すべてのプロセッサ パッケージまたは NUMA (Non-Uniform Memory Architecture) ノードに対し、どれだけ数が多い場合でも、1 つのスケジューリング ノードを作成します。明示的にタスクをスケジュール グループに関連付けない場合、スケジューラはタスクの追加先グループを選択します。

SchedulingProtocol スケジューラ ポリシーは、スケジューラが各スケジュール グループ内のタスクを実行する順序に影響を与えます。SchedulingProtocolEnhanceScheduleGroupLocality (既定値) に設定されている場合、現在のタスクが終了すると、または現在のタスクが協調的に譲歩すると、タスク スケジューラは、処理中のスケジュール グループから次のタスクを選択します。タスク スケジューラは、次の使用できるグループに移動する前に、現在のスケジュール グループを検索して作業対象を見つけます。これに対し、SchedulingProtocolEnhanceForwardProgress に設定されている場合、各タスクが終了または譲歩した後、スケジューラは次のスケジュール グループに移動します。これらのポリシーを比較した例については、「方法: スケジュール グループを使用して実行順序に影響を与える」を参照してください。

ランタイムを使用して、 concurrency::ScheduleGroup スケジュール グループを表すクラス。作成するのには、 ScheduleGroupオブジェクトを呼び出し、 concurrency::CurrentScheduler::CreateScheduleGroup または concurrency::Scheduler::CreateScheduleGroup メソッド。ランタイムは、Scheduler オブジェクトの有効期間を制御するために参照カウント メカニズムを使用しますが、ScheduleGroup オブジェクトの有効期間を制御するためにも、この参照カウント メカニズムを使用します。ScheduleGroup オブジェクトを作成すると、ランタイムは参照カウントを 1 に設定します。Concurrency::ScheduleGroup::Reference メソッド インクリメント参照カウンターが 1 つ。Concurrency::ScheduleGroup::Release メソッドでやって、参照カウンターが 1 つ。

同時実行ランタイムの多くの型により、オブジェクトをスケジュール グループに関連付けることができます。たとえば、 concurrency::agent クラスとメッセージのブロック クラスなど concurrency::unbounded_bufferconcurrency::join、および concurrency::timer、実行するコンス トラクターのオーバー ロードされたバージョンを提供、 ScheduleGroupオブジェクト。ランタイムは、この ScheduleGroup に関連付けられている Scheduler オブジェクトを使用してタスクをスケジュールします。

使用できます、 concurrency::ScheduleGroup::ScheduleTask 、軽量のタスクをスケジュールする方法。軽量タスクの詳細については、「軽量タスク」を参照してください。

スケジュール グループを使用してタスクの実行順序を制御する例については、「方法: スケジュール グループを使用して実行順序に影響を与える」を参照してください。

参照

処理手順

方法: スケジュール グループを使用して実行順序に影響を与える

概念

タスク スケジューラ (同時実行ランタイム)

スケジューラ インスタンス