コンカレンシー ランタイム
C++ のコンカレンシー ランタイムにより、信頼性が高く、スケーラブルで、応答性の高い並行アプリケーションを作成できます。 このフレームワークでは抽象のレベルが引き上げられるので、コンカレンシーに関連するインフラストラクチャの詳細を管理する必要はありません。 また、アプリケーションのサービスの品質への要求を満たすスケジューリング ポリシーを指定するためにも使用できます。 コンカレンシー ランタイムを初めて使用する場合に役立つ情報が記載されている次の各ドキュメントを活用してください。
参照ドキュメントについては、「参照 (コンカレンシー ランタイム)」を参照してください。
ヒント
コンカレンシー ランタイムは C++11 機能に大きく依存しており、最新の C++ のスタイルが採用されています。 詳細については、「C++ へようこそ - Modern C++」を参照してください。
コンカレンシー ランタイムの機能を選択する
記事 | 説明 |
---|---|
概要 | コンカレンシー ランタイムが重要である理由とその主要機能について説明しています。 |
他のコンカレンシー モデルと比較する | 各自のアプリケーション要件に最も合ったコンカレンシー モデルを使用できるように、コンカレンシー ランタイムと他のコンカレンシー モデル (Windows スレッド プールや OpenMP など) の違いについて説明しています。 |
OpenMP からコンカレンシー ランタイムへの移行 | OpenMP とコンカレンシー ランタイムの違いについて説明し、既存の OpenMP コードからコンカレンシー ランタイムの使用に移行する方法の例を示します。 |
並列パターン ライブラリ (PPL) | 並列ループ、タスク、および並列コンテナーを提供する PPL について説明します。 |
非同期エージェント ライブラリ | 非同期エージェントとメッセージ パッシングを使用して、アプリケーションにデータ フローおよびパイプライン処理タスクを簡単に組み込む方法について説明しています。 |
タスク スケジューラ | コンカレンシー ランタイムを使用するデスクトップ アプリケーションのパフォーマンスを細かく調整できるタスク スケジューラについて説明します。 |
PPL でのタスクの並列処理
記事 | 説明 |
---|---|
タスクの並列処理 方法: 並列呼び出しを使用して並列並べ替えルーチンを記述する 方法: Parallel.Invoke を使用して並列操作を実行する 方法: 遅延後に完了するタスクを作成する |
非同期コードを記述し、並列処理を分解するために役立つ、タスク グループとタスクについて説明します。 |
チュートリアル: フューチャの実装 | コンカレンシー ランタイムの機能をまとめて、より多くの処理を行う方法を示します。 |
チュートリアル: ユーザー インターフェイス スレッドからの処理の除去 | MFC アプリケーションの UI スレッドによって実行される処理をワーカー スレッドへ移動する方法を示します。 |
並列パターン ライブラリに関するベスト プラクティス コンカレンシー ランタイムに関する全般的なベスト プラクティス |
PPL の使用上のヒントとベスト プラクティスを提供します。 |
PPL でのデータの並列処理
記事 | 説明 |
---|---|
並列アルゴリズム 方法: parallel_for ループを記述する 方法: parallel_for_each ループを記述する 方法: マップ操作と縮小操作を並列実行する |
parallel_for 、 parallel_for_each 、 parallel_invoke および他の並列アルゴリズムについて説明します。 データの収集を含む データの並列化 の問題を解決するには、並列アルゴリズムを使用します。 |
並列コンテナーと並列オブジェクト 方法: 並列コンテナーを使用して効率を向上させる 方法: combinable を使用してパフォーマンスを向上させる 方法: combinable を使用して集合を結合する |
combinable クラス、および concurrent_vector 、 concurrent_queue 、 concurrent_unordered_map および他の並列コンテナーについて説明します。 要素へのスレッドセーフなアクセスを提供するコンテナーを必要とする場合には、並列コンテナーと並列オブジェクトを使用します。 |
並列パターン ライブラリに関するベスト プラクティス コンカレンシー ランタイムに関する全般的なベスト プラクティス |
PPL の使用上のヒントとベスト プラクティスを提供します。 |
タスクと並列アルゴリズムの取り消し
記事 | 説明 |
---|---|
PPL における取り消し処理 | 開始の方法やキャンセル要求への応答の方法など、PPL でのキャンセル処理の役割について説明します。 |
方法: キャンセル処理を使用して並列ループを中断する 方法: 例外処理を使用して並列ループを中断する |
データ並列処理を取り消すための 2 とおりの方法を示します。 |
ユニバーサル Windows プラットフォーム アプリ
記事 | 説明 |
---|---|
C++ における UWP アプリ用の非同期操作の作成 | 同時実行ランタイムを使用して UWP アプリケーションの非同期操作を生成する場合に注意する重要な点について説明します。 |
チュートリアル: タスクおよび XML HTTP 要求を使用した接続 | PPL タスクを IXMLHTTPRequest2 および IXMLHTTPRequest2Callback インターフェイスとまとめて、HTTP GET および POST 要求を UWP アプリケーションの Web サービスに送信する方法について説明します。 |
Windows ランタイム アプリのサンプル | ダウンロード可能な Windows ランタイムのコード サンプルおよびデモ アプリケーションが含まれます。 |
非同期エージェント ライブラリでのデータ フロー プログラミング
記事 | 説明 |
---|---|
非同期エージェント 非同期メッセージ ブロック メッセージ パッシング関数 方法: さまざまなプロデューサー/コンシューマー パターンを実装する 方法: call クラスおよび transformer クラスに処理関数を提供する 方法: データ パイプラインでトランスフォーマーを使用する 方法: 完了したタスクから選択する 方法: メッセージを定期的に送信する 方法: メッセージ ブロック フィルターを使用する |
非同期エージェント、メッセージ ブロック、およびコンカレンシー ランタイムでデータ フローの操作を実行するためのビルド ブロックであるメッセージ パッシング関数について説明します。 |
チュートリアル: エージェント ベースのアプリケーションの作成 チュートリアル: データフロー エージェントの作成 |
基本的なエージェント ベースのアプリケーションの作成方法を示します。 |
チュートリアル: イメージ処理ネットワークの作成 | イメージ処理を実行する非同期メッセージ ブロックのネットワークを作成する方法を示します。 |
チュートリアル: join を使用したデッドロックの防止 | コンカレンシー ランタイムを使用してアプリケーションでデッドロックを防止する方法について、"食事する哲学者の問題" を使用して説明します。 |
チュートリアル: カスタム メッセージ ブロックの作成 | 受信メッセージを優先順位に従って並べるカスタム メッセージ ブロックの型を作成する方法について説明します。 |
非同期エージェント ライブラリに関するベスト プラクティス コンカレンシー ランタイムに関する全般的なベスト プラクティス |
エージェントの使用上のヒントとベスト プラクティスを提供します。 |
例外処理とデバッグ
記事 | 説明 |
---|---|
例外処理 | コンカレンシー ランタイムで例外を使用する方法について説明します。 |
並列診断ツール | アプリケーションを微調整し、コンカレンシー ランタイムを最も効果的に使用できるようにする方法について説明しています。 |
パフォーマンスの調整
記事 | 説明 |
---|---|
並列診断ツール | アプリケーションを微調整し、コンカレンシー ランタイムを最も効果的に使用できるようにする方法について説明しています。 |
スケジューラ インスタンス 方法: スケジューラ インスタンスを管理する スケジューラ ポリシー 方法: 特定のスケジューラ ポリシーを指定する 方法: 特定のスケジューラ ポリシーを使用するエージェントを作成する |
スケジューラ インスタンスを使用してスケジューラ ポリシーを管理する方法を示します。 デスクトップ アプリケーションの場合、スケジューラ ポリシーを使って、特定の種類の作業負荷と特定の規則を関連付けることができます。 たとえば、昇格したスレッド優先順位で一部のタスクを実行するようにスケジューラ インスタンスを 1 つ作成し、他のタスクについては既定のスケジューラを使用して通常のスレッド優先順位で実行することができます。 |
スケジュール グループ 方法: スケジュール グループを使用して実行順序に影響を与える |
スケジュール グループを使用して、関連するタスクの関係付け (グループ化) を行う方法を説明します。 たとえば、関連するタスクが同一プロセッサ ノードでの実行によって恩恵を受ける場合などには、タスク間で高いレベルの局所性が求められます。 |
軽量タスク | 負荷分散や取り消しを必要としない作業を作成する場合に、軽量タスクがどのように役立つかを説明します。また既存のコードを改変してコンカレンシー ランタイムと使用する場合にも、軽量タスクが有用であることを説明します。 |
コンテキスト 方法: Context クラスを使用して協調セマフォを実装する 方法: オーバーサブスクリプションを使用して待機時間を短縮する |
コンカレンシー ランタイムによって管理されるスレッドの動作を制御する方法について説明します。 |
メモリ管理関数 方法: Alloc および Free を使用してメモリ パフォーマンスを改善する |
ここでは、コンカレンシー ランタイムに用意されているメモリ管理関数について説明します。これらの関数を使用すると、コンカレンシー方式でメモリの割り当てと解放を行うことができます。 |
その他のリソース
記事 | 説明 |
---|---|
Hilo での非同期プログラミング パターンとヒント (C++ と XAML を使った Windows ストア アプリ) | C++ および XAML を使用した Windows ランタイム アプリである Hilo で、同時実行ランタイムを使用して非同期操作を実行する方法について学習します。 |
Parallel Programming in Native Code blog (ネイティブ コードでの並行プログラミング ブログ) | コンカレンシー ランタイムでの並列プログラミングに関する詳細なブログ記事を別途紹介しています。 |
Parallel Computing in C++ and Native Code forum (C++ とネイティブ コードでの並列コンピューティング フォーラム) | コンカレンシー ランタイムに関するコミュニティ ディスカッションに参加できます。 |
並列プログラミング | .NET Framework に用意されている並列プログラミング モデルについて説明しています。 |