C#による マルチコアのための非同期/並列処理プログラミング
2013年7月20日紙版発売
2013年7月19日電子版発売
山本康彦 著
B5変形判/256ページ
定価3,058円(本体2,780円+税10%)
ISBN 978-4-7741-5828-0
書籍の概要
この本の概要
いまやマルチコアのCPUは主流と言えますが,その性能を十分に発揮させるためにはソフトウェアもそれに対応し,非同期処理/並列処理でパフォーマンスを上げなければなりません。とは言え,これは一般的なプログラマーには,なかなか普及しづらい技術でもありました。現在のC#には並列処理の機能が多数備わっており,ますます強化されています。また,マイクロソフトのWindows 8以降などでは非同期処理が必須となっています。まだまだ情報が少ない中,よく使われているC#の並列処理の基本を解説する本書は,すべてのプログラマー必読です。
こんな方におすすめ
- すでに実際の開発は経験しているが並列処理や非同期処理の経験はないC#プログラマー
目次
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 実行結果
Chapter6 まとめ
この本に関連する書籍
-
Swooleで学ぶPHP非同期処理 ~並行処理/並列処理の基礎から実践的な開発手法まで一気にわかる
近年,Web開発においてネットワーク経由での入出力を必要とするケースが増え,非同期処理を利用したWebアプリケーションの実装がごく一般的になりつつあります。その一...
-
C#プログラマーのための 基礎からわかるLINQマジック!
現在では“技術に保守的な現場”においてさえ顧客事情が変わっています。.NETの環境でも核心的な技術=LINQがようやく使えるようになりました。LINQは,実際に使ってみる...
-
改訂3版 パーフェクトC#
C#で.NET開発を行う人へのバイブル的1冊です。概要/基礎から実践までを幅広く学習でき,C#を扱ううえで知っておきたい知識は,この一冊に網羅されています。基本文法,...
-
[速攻入門]C#プログラミング すぐに現場で使える知識
C#の需要が高まっている現在,プログラミング現場では,C#のことを知らないプログラマーであっても,これを使う必要に迫られています。いま最もC#の知識を必要としてい...
-
[完全版]究極のC#プログラミング ――新スタイルによる実践的コーディング
C#は現在ではよく使われている言語であり処理系ですが,Cなどに比べると,まだ書籍の種類は多くありません。案外,言語としてのポイントを絞った,効率的な学習を意図...