書籍概要

#による マルチコアのための非同期/並列処理プログラミング

著者
発売日
更新日

概要

いまやマルチコアの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 まとめ

サポート

ダウンロード

(2018年10月10日更新)

本書の「PART 4」で作成したソースコードは,以下のリンクをクリックすることでダウンロードできます。

ダウンロード
C_sharp_MultiCore_Part4_20130617.zip

ダウンロードしたファイルには,本書のPART 4「マルチコア 非同期/並列処理 実践プログラミング」で作成したソースコードが,章ごとに分けて収められています。圧縮ファイルを展開することで,下記のフォルダを確認することができます。

フォルダ名
Part04Chapter02Chapter 2 最初の実装
Part04Chapter03Chapter 3 ロジックと画面を非同期化する
Part04Chapter04Chapter 4 ロジックを並列化する
Part04Chapter05Chapter 5 ロジックを改良する

それぞれのフォルダに格納されているソースコードをビルドして実行するには,Windows 8以降のOSと,Visual Studio Express 2012 for Windows 8 以降(または有償版)の開発環境が必要です。

また,上記のソースコードをWindows 10向けに移植したものも公開いたします。

ダウンロード(Windows 10向け)
C_sharp_MultiCore_Part4_Win10VS2017_20181009.zip

こちらのソースコードをビルドして実行するには,Windows 10以降のOSと,Visual Studio 2017以降(無償版または有償版)のUWPアプリ開発環境が必要です。プラットフォームが異なるため,本書のソースコードとは一部に違いがございます。詳しくは,ダウンロードしたアーカイブ内の「C#MultiCore_Part4_Win10VS2017.txt」ファイルをご覧ください。また,同じコードを
[GitHub|https://github.com/biac/ManyCore]でも公開しています。

なお,上記ソースコードの内容および使用方法などについて,電話やメール,文書でのお問い合わせを含むサポート業務は,著者も技術評論社も一切お受けしておりません。すべて読者の方の責任においてご利用いただくことになります。この点をあらかじめご了解の上,ご使用ください。

補足情報

サンプルコードをお読みいただく際の注意

本文中に記載のないメソッドなどは,章末のソースコードを参照してください。

正誤表

小社刊『C#による マルチコアのための非同期/並列処理プログラミング』(山本康彦・著/2013年8月25日 初版 第1刷)におきまして,一部の記述に間違いのあることが判明いたしましたので,下記のとおりお知らせいたします。読者の皆様にはご迷惑をおかけし,まことに申し訳ございません。ご容赦くださいますよう,お願い申し上げます。

(2013年11月7日更新)

P.75(本文下から7行目)

IsBackgroundプロパティをfalseに設定することで,
IsBackgroundプロパティをtrueに設定することで,

P.225(本文下から6行目および脚注)

WritableBitmapEx
WriteableBitmapEx

P.227(リスト2.6内:上から10行目および下から9行目)

WritableBitmapEx
WriteableBitmapEx

P.252(索引内 「W」の項)

WritableBitmapEx
WriteableBitmapEx

商品一覧