目次
Part1 マルチコアのための非同期/並列処理の原理
Chapter1 マルチコアを使いこなす非同期処理/並列処理の時代
- 1.1 これからのUI/UXはこうでなければ!
- 1.2 UI/UXの課題を解決する非同期処理/並列処理
- 1.3 .NET Frameworkの非同期処理/並列処理サポート
- 1.4 非同期処理/並列処理を試して納得するための本書の構成
- 1.5 非同期処理/並列処理/マルチコアを理解するための用語集
Chapter2 試して納得! マルチコア活用プログラミングの原理とポイント
- 2.1 コアの能力を使い切る「大喰らい」プログラム
- 2.2 非同期(並行)処理をさせてみる
- 2.2.1 非同期処理とは?
- 2.2.2 非同期処理の開始
- 2.2.3 処理結果を返す/受け取る
- 2.2.4 非同期処理の協調と競合
- 2.3 並列処理をさせてみる
- 2.3.1 並列処理とは?
- 2.3.2 実装してみよう
- 2.3.3 パフォーマンスは得られたか?
- 2.4 テスト/デバッグの方法
- 2.4.1 ロジック本体をテスト可能に作る
- 2.4.2 実行中にデバッガーをアタッチする
- 2.5 まとめ
- 2.6 第2章で試したソースコード
- 2.6.1 「大喰らい」プログラム
- 2.6.2 「協調」プログラム
Part2 マルチコアを使いこなすための非同期/並列処理必須知識
Chapter1 プロセス/AppDomain/スレッド/タスク……
- 1.1 マルチプロセスとマルチスレッド
- 1.2 スレッドコンテキスト
- 1.3 フォアグラウンドスレッドとバックグラウンドスレッド
- 1.4 タスク
- 1.5 スレッドプール
Chapter2 スレッドの開始と完了待ち
- 2.1 Threadを直接扱う
- 2.2 ThreadPoolを使う
- 2.3 delegateを使う
- 2.4 BackgroundWorkerを使う(.NET 2.0)
- 2.5 Componentクラスを継承したEAP(.NET 2.0)
- 2.6 タスクを使う(.NET 4)
Chapter3 スレッド処理完了後に戻り値を取り出す
- 3.1 Thread/ThreadPool
- 3.2 delegateのEndInvokeを使う
- 3.3 BackgroundWorker(.NET 2.0)
- 3.4 Componentクラスを継承したEAP(.NET 2.0)
- 3.5 タスク(.NET 4)
Chapter4 スレッド処理完了後に続けて別の処理を実行する
- 4.1 Thread/ThreadPool
- 4.2 delegateのコールバック
- 4.3 BackgroundWorker(.NET 2.0)
- 4.4 Componentクラスを継承したEAP(.NET 2.0)
- 4.5 タスクの継続タスク(.NET 4)
Chapter5 async/awaitで継続タスクを簡易表記する
- 5.1 awaitキーワードの役割
- 5.2 asyncキーワードの役割
Chapter6 スレッド間で同調させる
- 6.1 フラグをポーリングして同調
- 6.2 イベント待機ハンドルを使って同調
- 6.3 バリアを使って同調(.NET 4)
Chapter7 スレッド間で1つのものを共用する
- 7.1 Interlockedクラスで整数を共用する
- 7.2 lockキーワードを使ってオブジェクトを共用する
- 7.3 Monitorクラスでオブジェクトを共用する
- 7.4 ReaderWriterLockでオブジェクトを共用する
- 7.5 MutexやSemaphoreでオブジェクトを共用する
Chapter8 スレッドごとに変数を分ける
- 8.1 スレッドローカルストレージ
Chapter9 スレッドで発生した例外
- 9.1 Thread/ThreadPool(.NET 2.0)
- 9.2 delegateのEndInvoke(.NET 2.0)
- 9.3 BackgroundWorker/EAP(.NET 2.0)
- 9.4 タスク(.NET 4)
Chapter10 スレッド処理からの進捗報告
- 10.1 ワーカースレッドからUIスレッドのメソッドを呼ぶ
- 10.2 BackgroundWorkerの進捗報告(.NET 2.0)
- 10.3 IProgress
を使った進捗報告(.NET 4.5)
Chapter11 スレッド処理のキャンセル
- 11.1 BackgroundWorkerのキャンセル(.NET 2.0)
- 11.2 キャンセルトークンによる方法(.NET 4)
- 11.2.1 ThreadPoolを使ったスレッド処理の場合
- 11.2.2 Taskを使ったスレッド処理の場合
Chapter12 ParallelクラスとPLINQ (.NET 4)
- 12.1 Parallelクラス(.NET 4)
- 12.1.1 Parallel.For/ForEach
- 12.1.2 Invoke
- 12.2 PLINQ(.NET 4)
Part3 マルチコアのためのC#/.NETの非同期/並列処理の方法
Chapter1 例題
Chapter2 .NET 1.x
- 2.1 ThreadPool.QueueUserWorkItemで並列処理
- 2.2 スレッド終了をポーリングする非同期処理
- 2.3 BeginInvoke/EndInvokeで非同期処理(APM)
- 2.4 Workerクラス
Chapter3 .NET 2.0
- 3.1 BackgroundWorkerで非同期処理
- 3.2 Async/Completedで非同期処理(EAP)
Chapter4 .NET 3.5
- 4.1 BackgroundWorkerで非同期処理
Chapter5 .NET 4
- 5.1 Taskクラスで非同期処理(TAP)
- 5.2 Task Parallel Libraryで並列処理
- 5.2.1 Parallelクラスを使う
- 5.2.2 PLINQを使う
Chapter6 Silverlight
- 6.1 Reactive Extensionsで非同期処理
Chapter7 .NET 4.5
- 7.1 async/awaitで非同期処理
- 7.2 非同期処理の結果の返し方を見直す
- 7.2.1 並列処理中の例外
- 7.3 WinMDの非同期処理
Part4 マルチコア非同期/並列処理実践プログラミング
Chapter1 セルオートマトン「ラングトンのループ」
- 1.1 ルール
- 1.2 初期状態
Chapter2 最初の実装
- 2.1 ルールの表現
- 2.2 ラングトンのループ
- 2.3 画面の描画
- 2.4 実行結果
Chapter3 ロジックと画面を非同期化する
- 3.1 画面をフリーズさせないための非同期化
- 3.2 ロジックを全速力で走らせる
- 3.2.1 リソースの排他を考える
- 3.3 画面は可能な範囲で描画する
- 3.4 実行結果
Chapter4 ロジックを並列化する
- 4.1 Parallel.Forで並列化
- 4.1.1 書き込みの排他を考える
- 4.2 実行結果
Chapter5 ロジックを改良する
- 5.1 2つのループを1つに
- 5.2 観測用の配列を廃止
- 5.3 ルールの内部表現をスリム化
- 5.4 実行結果