基本介紹
圖書基本信息,內容簡介,
圖書基本信息
出版時間:2012-1-1
版 次:1
頁 數:487
字 數:779000
印刷時間:2012-1-1
開 本:16開
紙 張:膠版紙
印 次:1
I S B N:9787302273561
包 裝:平裝
內容簡介
您想淋漓盡致地發揮多核計算機系統的處理能力嗎?《c#並行編程高級教程:精通.net 4 parallel extensions》將幫助您實現這一夙願。這本精品書籍濃墨重彩地描述如何使用c# 4、visual studio 2010和.net framework 4高效地創建基於任務的並行應用程式,詳細講述最新的單指令、多數據流指令和向量化等並行編程技術,介紹現代並行庫,討論如何珠聯璧合地使用高級intel工具與c#,並指導您巧妙使用新引入的輕型協調結構來開發自己的解決方案並解決最棘手的並發編程問題。
主要內容
介紹如何基於新task parallel library和.net 4設計穩定的可擴展並行應用程式。
講解命令式數據並行、命令式任務並行、並發集合以及協調數據結構。
描述plinq高級聲明式數據並行。
討論如何使用新的visual studio 2010並行調試功能來調試匿名方法、任務和執行緒。
演示如何對數據源進行分區,以便在不同任務和執行緒之間合理分配工作負荷。
目錄
第1章 基於任務的程式設計
1.1 使用共享記憶體的多核系統
1.1.1 共享記憶體多核系統與分散式記憶體系統之間的區別
1.1.2 並行程式設計和多核程式設計
1.2 理解硬體執行緒和軟體執行緒
1.3 理解amdahl法則
1.4 考慮gustafson法則
1.5 使用輕量級並發模型
1.6 創建成功的基於任務的設計
1.6.1 以並發的思想指導設計
1.6.2 理解交錯並發、並發和並行之間的區別
1.6.3 並行化任務
1.6.4 儘量減少臨界區
1.6.5 理解多核並行程式的設計原則
1.7 為numa架構和更高的可擴展性做好準備
1.1 使用共享記憶體的多核系統
1.1.1 共享記憶體多核系統與分散式記憶體系統之間的區別
1.1.2 並行程式設計和多核程式設計
1.2 理解硬體執行緒和軟體執行緒
1.3 理解amdahl法則
1.4 考慮gustafson法則
1.5 使用輕量級並發模型
1.6 創建成功的基於任務的設計
1.6.1 以並發的思想指導設計
1.6.2 理解交錯並發、並發和並行之間的區別
1.6.3 並行化任務
1.6.4 儘量減少臨界區
1.6.5 理解多核並行程式的設計原則
1.7 為numa架構和更高的可擴展性做好準備
第1章 基於任務的程式設計
1.1 使用共享記憶體的多核系統
1.1.1 共享記憶體多核系統與分散式記憶體系統之間的區別
1.1.2 並行程式設計和多核程式設計
1.2 理解硬體執行緒和軟體執行緒
1.3 理解amdahl法則
1.4 考慮gustafson法則
1.5 使用輕量級並發模型
1.6 創建成功的基於任務的設計
1.6.1 以並發的思想指導設計
1.6.2 理解交錯並發、並發和並行之間的區別
1.6.3 並行化任務
1.6.4 儘量減少臨界區
1.6.5 理解多核並行程式的設計原則
1.7 為numa架構和更高的可擴展性做好準備
1.8 判斷是否適合併行化
1.9 小結
第2章 命令式數據並行
2.1 載入並行任務
2.1.1 system.threading.tasks.parallel類
2.1.2 parallel.invoke
2.2 將串列代碼轉換為並行代碼
2.2.1 檢測可並行化的熱點
2.2.2 測量並行執行的加速效果
2.2.3 理解並發執行
2.3 循環並行化
2.3.1 parallel.for
2.3.2 parallel.foreach
2.3.3 從並行循環中退出
2.4 指定並行度
2.4.1 paralleloptions
2.4.2 計算硬體執行緒
2.4.3 邏輯核心並不是物理核心
2.5 通過甘特圖檢測臨界區
2.6 小結
第3章 命令式任務並行
3.1 創建和管理任務
3.1.1 system.threading.tasks.task
3.1.2 理解task狀態和生命周期
3.1.3 通過使用任務來對代碼進行並行化
3.1.4 等待任務完成
3.1.5 忘記複雜的執行緒
3.1.6 通過取消標記取消任務
3.1.7 從任務返回值
3.1.8 taskcreationoptions
3.1.9 通過延續串聯多個任務
3.1.10 編寫適應並發和並行的代碼
3.2 小結
第4章 並發集合
4.1 理解並發集合提供的功能
4.1.1 system.collections.concurrent
4.1.2 concurrentqueue
4.1.3 理解並行的生產者-消費者模式
4.1.4 concurrentstack
4.1.5 將使用數組和不安全集合的代碼轉換為使用並發集合的代碼
4.1.6 concurrentbag
4.1.7 iproducerconsumer
collection
4.1.8 blockingcollection
4.1.9 concurrentdictionary
4.2 小結
第5章 協調數據結構
5.1 通過汽車和車道理解並發難題
5.1.1 非預期的副作用
5.1.2 競爭條件
5.1.3 死鎖
5.1.4 使用原子操作的無鎖算法
5.1.5 使用本地存儲的無鎖算法
5.2 理解新的同步機制
5.3 使用同步原語
5.3.1 通過屏障同步並發任務
5.3.2 屏障和continuewhenall
5.3.3 在所有的參與者任務中捕捉異常
5.3.4 使用逾時
5.3.5 使用動態數目的參與者
5.4 使用互斥鎖
5.4.1 使用monitor
5.4.2 使用鎖逾時
5.4.3 將代碼重構為避免使用鎖
5.5 將自旋鎖用作互斥鎖原語
5.5.1 使用逾時
5.5.2 使用基於自旋的等待
5.5.3 自旋和處理器出讓
5.5.4 使用volatile修飾符
5.6 使用輕量級的手動重置事件
5.6.1 使用manualreseteventslim進行自旋和等待
5.6.2 使用逾時和取消
5.6.3 使用manualresetevent
5.7 限制資源的並發訪問
5.7.1 使用semaphoreslim
5.7.2 使用逾時和取消
5.7.3 使用 semaphore
5.8 通過countdownevent簡化動態fork和join場景
5.9 使用原子操作
5.10 小結
第6章 plinq:聲明式數據並行
6.1 從linq轉換到plinq
6.1.1 parallelenumerable及其asparallel方法
6.1.2 asordered和orderby子句
6.2 指定執行模式
6.3 理解plinq中的數據分區
6.4 通過plinq執行歸約操作
6.5 創建自定義的plinq聚合函式
6.6 並發plinq任務
6.7 取消plinq
6.8 指定所需的並行度
6.8.1 withdegreeofparallelism
6.8.2 測量可擴展性
6.9 使用forall
6.9.1 foreach和forall的區別
6.9.2 測量可擴展性
6.10 通過withmergeoptions配置返回結果的方式
6.11 處理plinq拋出的異常
6.12 使用plinq執行mapreduce算法
6.13 使用plinq設計串列多步操作
6.14 小結
第7章 visual studio 2010的任務調試能力
7.1 充分利用多顯示器的支持
7.2 理解並行任務調試器視窗
7.3 查看parallel stacks圖
7.4 跟蹤並發代碼
7.4.1 調試匿名方法
7.4.2 查看方法
7.4.3 在原始碼中查看執行緒
7.5 檢測死鎖
7.6 小結
第8章 執行緒池
8.1 探究任務的底層技術
8.2 理解新的clr 4執行緒池引擎
8.2.1 理解全局佇列
8.2.2 等待工作執行緒完成工作
8.2.3 跟蹤動態數目的工作執行緒
8.2.4 使用任務(而不是執行緒)將作業加入佇列
8.2.5 理解任務和執行緒池之間的關係
8.2.6 理解局部佇列和工作竊取算法
8.2.7 指定自定義的任務調度器
8.3 小結
第9章 異步編程模型
9.1 結合使用異步編程和任務
9.1.1 使用taskfactory.fromasync
9.1.2 編寫異步方法執行結束之後的延續
9.1.3 合併多個並發異步操作的結果
9.1.4 執行異步wpf ui更新
9.1.5 執行異步windows forms ui更新
9.1.6 創建執行eap操作的任務
9.1.7 使用taskcompletionsource
9.2 小結
第10章 並行測試和調優
10.1 準備並行測試
10.1.1 使用性能剖析功能
10.1.2 測量並發性
10.2 常見問題模式的解決方案
10.2.1 串列化的執行
10.2.2 鎖爭用
10.2.3 鎖封護
10.2.4 申請超額
10.2.5 申請不足
10.2.6 分區問題
10.2.7 工作站垃圾回收開銷
10.2.8 使用伺服器垃圾回收
10.2.9 i/o瓶頸
10.2.10 主執行緒過載
10.3 理解偽共享
10.4 小結
第11章 向量化、simd指令以及其他並行庫
11.1 理解simd和向量化
11.2 從mmx到sse4.x和avx
11.3 使用intel math kernellibrary
11.3.1 使用適用於多核的高度最佳化的軟體函式
11.3.2 將基於任務的編程和外部最佳化的庫混合使用
11.3.3 並行生成偽隨機數
11.4 使用intel integratedperformance primitives
11.5 小結
附錄a .net 4中與並行相關的類圖
附錄b 並發uml模型
附錄c parallel extensions extras
1.1 使用共享記憶體的多核系統
1.1.1 共享記憶體多核系統與分散式記憶體系統之間的區別
1.1.2 並行程式設計和多核程式設計
1.2 理解硬體執行緒和軟體執行緒
1.3 理解amdahl法則
1.4 考慮gustafson法則
1.5 使用輕量級並發模型
1.6 創建成功的基於任務的設計
1.6.1 以並發的思想指導設計
1.6.2 理解交錯並發、並發和並行之間的區別
1.6.3 並行化任務
1.6.4 儘量減少臨界區
1.6.5 理解多核並行程式的設計原則
1.7 為numa架構和更高的可擴展性做好準備
1.8 判斷是否適合併行化
1.9 小結
第2章 命令式數據並行
2.1 載入並行任務
2.1.1 system.threading.tasks.parallel類
2.1.2 parallel.invoke
2.2 將串列代碼轉換為並行代碼
2.2.1 檢測可並行化的熱點
2.2.2 測量並行執行的加速效果
2.2.3 理解並發執行
2.3 循環並行化
2.3.1 parallel.for
2.3.2 parallel.foreach
2.3.3 從並行循環中退出
2.4 指定並行度
2.4.1 paralleloptions
2.4.2 計算硬體執行緒
2.4.3 邏輯核心並不是物理核心
2.5 通過甘特圖檢測臨界區
2.6 小結
第3章 命令式任務並行
3.1 創建和管理任務
3.1.1 system.threading.tasks.task
3.1.2 理解task狀態和生命周期
3.1.3 通過使用任務來對代碼進行並行化
3.1.4 等待任務完成
3.1.5 忘記複雜的執行緒
3.1.6 通過取消標記取消任務
3.1.7 從任務返回值
3.1.8 taskcreationoptions
3.1.9 通過延續串聯多個任務
3.1.10 編寫適應並發和並行的代碼
3.2 小結
第4章 並發集合
4.1 理解並發集合提供的功能
4.1.1 system.collections.concurrent
4.1.2 concurrentqueue
4.1.3 理解並行的生產者-消費者模式
4.1.4 concurrentstack
4.1.5 將使用數組和不安全集合的代碼轉換為使用並發集合的代碼
4.1.6 concurrentbag
4.1.7 iproducerconsumer
collection
4.1.8 blockingcollection
4.1.9 concurrentdictionary
4.2 小結
第5章 協調數據結構
5.1 通過汽車和車道理解並發難題
5.1.1 非預期的副作用
5.1.2 競爭條件
5.1.3 死鎖
5.1.4 使用原子操作的無鎖算法
5.1.5 使用本地存儲的無鎖算法
5.2 理解新的同步機制
5.3 使用同步原語
5.3.1 通過屏障同步並發任務
5.3.2 屏障和continuewhenall
5.3.3 在所有的參與者任務中捕捉異常
5.3.4 使用逾時
5.3.5 使用動態數目的參與者
5.4 使用互斥鎖
5.4.1 使用monitor
5.4.2 使用鎖逾時
5.4.3 將代碼重構為避免使用鎖
5.5 將自旋鎖用作互斥鎖原語
5.5.1 使用逾時
5.5.2 使用基於自旋的等待
5.5.3 自旋和處理器出讓
5.5.4 使用volatile修飾符
5.6 使用輕量級的手動重置事件
5.6.1 使用manualreseteventslim進行自旋和等待
5.6.2 使用逾時和取消
5.6.3 使用manualresetevent
5.7 限制資源的並發訪問
5.7.1 使用semaphoreslim
5.7.2 使用逾時和取消
5.7.3 使用 semaphore
5.8 通過countdownevent簡化動態fork和join場景
5.9 使用原子操作
5.10 小結
第6章 plinq:聲明式數據並行
6.1 從linq轉換到plinq
6.1.1 parallelenumerable及其asparallel方法
6.1.2 asordered和orderby子句
6.2 指定執行模式
6.3 理解plinq中的數據分區
6.4 通過plinq執行歸約操作
6.5 創建自定義的plinq聚合函式
6.6 並發plinq任務
6.7 取消plinq
6.8 指定所需的並行度
6.8.1 withdegreeofparallelism
6.8.2 測量可擴展性
6.9 使用forall
6.9.1 foreach和forall的區別
6.9.2 測量可擴展性
6.10 通過withmergeoptions配置返回結果的方式
6.11 處理plinq拋出的異常
6.12 使用plinq執行mapreduce算法
6.13 使用plinq設計串列多步操作
6.14 小結
第7章 visual studio 2010的任務調試能力
7.1 充分利用多顯示器的支持
7.2 理解並行任務調試器視窗
7.3 查看parallel stacks圖
7.4 跟蹤並發代碼
7.4.1 調試匿名方法
7.4.2 查看方法
7.4.3 在原始碼中查看執行緒
7.5 檢測死鎖
7.6 小結
第8章 執行緒池
8.1 探究任務的底層技術
8.2 理解新的clr 4執行緒池引擎
8.2.1 理解全局佇列
8.2.2 等待工作執行緒完成工作
8.2.3 跟蹤動態數目的工作執行緒
8.2.4 使用任務(而不是執行緒)將作業加入佇列
8.2.5 理解任務和執行緒池之間的關係
8.2.6 理解局部佇列和工作竊取算法
8.2.7 指定自定義的任務調度器
8.3 小結
第9章 異步編程模型
9.1 結合使用異步編程和任務
9.1.1 使用taskfactory.fromasync
9.1.2 編寫異步方法執行結束之後的延續
9.1.3 合併多個並發異步操作的結果
9.1.4 執行異步wpf ui更新
9.1.5 執行異步windows forms ui更新
9.1.6 創建執行eap操作的任務
9.1.7 使用taskcompletionsource
9.2 小結
第10章 並行測試和調優
10.1 準備並行測試
10.1.1 使用性能剖析功能
10.1.2 測量並發性
10.2 常見問題模式的解決方案
10.2.1 串列化的執行
10.2.2 鎖爭用
10.2.3 鎖封護
10.2.4 申請超額
10.2.5 申請不足
10.2.6 分區問題
10.2.7 工作站垃圾回收開銷
10.2.8 使用伺服器垃圾回收
10.2.9 i/o瓶頸
10.2.10 主執行緒過載
10.3 理解偽共享
10.4 小結
第11章 向量化、simd指令以及其他並行庫
11.1 理解simd和向量化
11.2 從mmx到sse4.x和avx
11.3 使用intel math kernellibrary
11.3.1 使用適用於多核的高度最佳化的軟體函式
11.3.2 將基於任務的編程和外部最佳化的庫混合使用
11.3.3 並行生成偽隨機數
11.4 使用intel integratedperformance primitives
11.5 小結
附錄a .net 4中與並行相關的類圖
附錄b 並發uml模型
附錄c parallel extensions extras