C#並行編程高級教程

內容介紹

您想淋漓盡致地發揮多核計算機系統的處理能力嗎?《C#並行編程高級教程:精通NET 4 Parallel Extensions》將幫助您實現這一夙願。這本精品書籍濃墨重彩地描述如何使用C# 4、Visual Studio 2010和.NET Framework 4高效地創建基於任務的並行應用程式,詳細講述最新的單指令、多數據流指令和向量化等並行編程技術,介紹現代並行庫,討論如何珠聯璧合地使用高級Intel工具與C#,並指導您巧妙使用新引入的輕型協調結構來開發自己的解決方案並解決最棘手的並發編程問題。
主要內容
◆介紹如何基於新Task Parallel Library和.NET 4設計穩定的可擴展並行應用程式。
◆講解命令式數據並行、命令式任務並行、並發集合以及協調數據結構。
◆描述PLINQ高級聲明式數據並行。
◆討論如何使用新的Visual Studio 2010並行調試功能來調試匿名方法、任務和執行緒。
◆演示如何對數據源進行分區,以便在不同任務和執行緒之間合理分配工作負荷。

作者介紹

從8歲起就開始使用計算機了。在20世紀80年代初,他開始在傳奇的TexasTI-99/4A和Commodore64家用計算機上編寫程式。他作為一名優秀畢業生在UADE大學獲得了學士學位,然後又在UCEMA大學憑藉出色的畢業論文獲得了工商管理碩士學位。
自1997年以來,Gaston在並行編程、多處理器和多核處理器領域進行了深入研究。在設計和開發各種類型複雜的利用多核處理能力的並行解決方案方面,他有著14年的豐富經驗,後來,他開始通過C#和.NETFramework編寫並行解決方案。

作品目錄

第1章 基於任務的程式設計 11.1 使用共享記憶體的多核系統 2 1.1.1 共享記憶體多核系統與分散式記憶體系統之間的區別 3 1.1.2 並行程式設計和多核程式設計 41.2 理解硬體執行緒和軟體執行緒 51.3 理解Amdahl法則 81.4 考慮Gustafson法則 111.5 使用輕量級並發模型 141.6 創建成功的基於任務的設計 15 1.6.1 以並發的思想指導設計 16 1.6.2 理解交錯並發、並發和並行之間的區別 17 1.6.3 並行化任務 18 1.6.4 儘量減少臨界區 18 1.6.5 理解多核並行程式的設計原則 191.7 為NUMA架構和更高的可擴展性做好準備 201.8 判斷是否適合併行化 241.9 小結 25第2章 命令式數據並行 272.1 載入並行任務 27 2.1.1 System.Threading.Tasks.Parallel類 29 2.1.2 Parallel.Invoke 302.2 將串列代碼轉換為並行代碼 37 2.2.1 檢測可並行化的熱點 37 2.2.2 測量並行執行的加速效果 40 2.2.3 理解並發執行 422.3 循環並行化 43 2.3.1 Parallel.For 43 2.3.2 Parallel.ForEach 49 2.3.3 從並行循環中退出 562.4 指定並行度 62 2.4.1 ParallelOptions 63 2.4.2 計算硬體執行緒 65 2.4.3 邏輯核心並不是物理核心 662.5 通過甘特圖檢測臨界區 672.6 小結 68第3章 命令式任務並行 693.1 創建和管理任務 70 3.1.1 System.Threading.Tasks.Task 71 3.1.2 理解Task狀態和生命周期 72 3.1.3 通過使用任務來對代碼進行並行化 74 3.1.4 等待任務完成 80 3.1.5 忘記複雜的執行緒 81 3.1.6 通過取消標記取消任務 82 3.1.7 從任務返回值 88 3.1.8 TaskCreationOptions 90 3.1.9 通過延續串聯多個任務 90 3.1.10 編寫適應並發和並行的代碼 953.2 小結 96第4章 並發集合 974.1 理解並發集合提供的功能 98 4.1.1 System.Collections.Concurrent 100 4.1.2 ConcurrentQueue 101 4.1.3 理解並行的生產者-消費者模式 104 4.1.4 ConcurrentStack 116 4.1.5 將使用數組和不安全集合的代碼轉換為使用並發集合的代碼 121 4.1.6 ConcurrentBag 122 4.1.7 IProducerConsumerCollection 129 4.1.8 BlockingCollection 129 4.1.9 ConcurrentDictionary 1434.2 小結 147第5章 協調數據結構 1495.1 通過汽車和車道理解並發難題 150 5.1.1 非預期的副作用 150 5.1.2 競爭條件 151 5.1.3 死鎖 152 5.1.4 使用原子操作的無鎖算法 153 5.1.5 使用本地存儲的無鎖算法 1545.2 理解新的同步機制 1565.3 使用同步原語 157 5.3.1 通過屏障同步並發任務 158 5.3.2 屏障和ContinueWhenAll 164 5.3.3 在所有的參與者任務中捕捉異常 165 5.3.4 使用逾時 166 5.3.5 使用動態數目的參與者 1715.4 使用互斥鎖 172 5.4.1 使用Monitor 176 5.4.2 使用鎖逾時 177 5.4.3 將代碼重構為避免使用鎖 1805.5 將自旋鎖用作互斥鎖原語 183 5.5.1 使用逾時 186 5.5.2 使用基於自旋的等待 187 5.5.3 自旋和處理器出讓 190 5.5.4 使用volatile修飾符 1935.6 使用輕量級的手動重置事件 194 5.6.1 使用ManualResetEventSlim進行自旋和等待 194 5.6.2 使用逾時和取消 199 5.6.3 使用ManualResetEvent 2035.7 限制資源的並發訪問 204 5.7.1 使用SemaphoreSlim 205 5.7.2 使用逾時和取消 209 5.7.3 使用 Semaphore 2095.8 通過CountdownEvent簡化動態fork和join場景 2115.9 使用原子操作 2155.10 小結 220第6章 PLINQ:聲明式數據並行 2216.1 從LINQ轉換到PLINQ 222 6.1.1 ParallelEnumerable及其AsParallel方法 224 6.1.2 AsOrdered和orderby子句 2256.2 指定執行模式 2286.3 理解PLINQ中的數據分區 2296.4 通過PLINQ執行歸約操作 2346.5 創建自定義的PLINQ聚合函式 2356.6 並發PLINQ任務 2406.7 取消PLINQ 2436.8 指定所需的並行度 245 6.8.1 WithDegreeOfParallelism 245 6.8.2 測量可擴展性 2476.9 使用ForAll 249 6.9.1 foreach和ForAll的區別 250 6.9.2 測量可擴展性 2516.10 通過WithMergeOptions配置返回結果的方式 2536.11 處理PLINQ拋出的異常 2556.12 使用PLINQ執行MapReduce算法 2576.13 使用PLINQ設計串列多步操作 2596.14 小結 261第7章 Visual Studio 2010的任務調試能力 2637.1 充分利用多顯示器的支持 2647.2 理解並行任務調試器視窗 2677.3 查看Parallel Stacks圖 2737.4 跟蹤並發代碼 280 7.4.1 調試匿名方法 288 7.4.2 查看方法 290 7.4.3 在原始碼中查看執行緒 2927.5 檢測死鎖 2947.6 小結 300第8章 執行緒池 3018.1 探究任務的底層技術 3018.2 理解新的CLR 4執行緒池引擎 303 8.2.1 理解全局佇列 303 8.2.2 等待工作執行緒完成工作 313 8.2.3 跟蹤動態數目的工作執行緒 319 8.2.4 使用任務(而不是執行緒)將作業加入佇列 323 8.2.5 理解任務和執行緒池之間的關係 326 8.2.6 理解局部佇列和工作竊取算法 330 8.2.7 指定自定義的任務調度器 3358.3 小結 340第9章 異步編程模型 3419.1 結合使用異步編程和任務 342 9.1.1 使用TaskFactory.FromAsync 343 9.1.2 編寫異步方法執行結束之後的延續 348 9.1.3 合併多個並發異步操作的結果 349 9.1.4 執行異步WPF UI更新 351 9.1.5 執行異步Windows Forms UI更新 358 9.1.6 創建執行EAP操作的任務 365 9.1.7 使用TaskCompletionSource 3739.2 小結 377第10章 並行測試和調優 37910.1 準備並行測試 379 10.1.1 使用性能剖析功能 383 10.1.2 測量並發性 38510.2 常見問題模式的解決方案 394 10.2.1 串列化的執行 395 10.2.2 鎖爭用 397 10.2.3 鎖封護 398 10.2.4 申請超額 401 10.2.5 申請不足 404 10.2.6 分區問題 406 10.2.7 工作站垃圾回收開銷 408 10.2.8 使用伺服器垃圾回收 411 10.2.9 I/O瓶頸 412 10.2.10 主執行緒過載 41310.3 理解偽共享 41610.4 小結 419第11章 向量化、SIMD指令以及其他並行庫 42111.1 理解SIMD和向量化 42111.2 從MMX到SSE4.X和AVX 42311.3 使用Intel Math KernelLibrary 425 11.3.1 使用適用於多核的高度最佳化的軟體函式 433 11.3.2 將基於任務的編程和外部最佳化的庫混合使用 434 11.3.3 並行生成偽隨機數 43411.4 使用Intel IntegratedPerformance Primitives 43911.5 小結 445附錄A .NET 4中與並行相關的類圖 447附錄B 並發UML模型 461附錄C Parallel Extensions Extras 469

相關詞條

熱門詞條

聯絡我們