編輯推薦
在計算機處理器發展為包含越來越多的核心的時期,多綫程是創建可伸縮性、高效的、高響應性應用程序的關鍵因素。如果你沒有正確地使用多綫程,它會導緻難以捉摸的問題,需要你花費大量時間去解決。因此,現代應用程序開發人員必須深入理解多綫程。
《C#多綫程編程實戰》是一本通俗易懂的C#多綫程編程指南,通過70多個容易理解的示例,循序漸進地講解C#5.0中的異步及並發編程,引導讀者瞭解Windows下C#多綫程編程的多樣性。
通過閱讀本書,你將學到:
使用原始綫程、異步綫程,以及協調它們工作
使用任務並行庫設計自己的異步API
使用C# 5.0異步語言特性
使用I/O綫程提高服務器應用程序性能
使用PLINQ並行化LINQ查詢
使用Windows 8異步API
使用Reactive Extensions運行異步操作並管理選項
內容簡介
2005年,英特爾推齣瞭其首款多核心CPU,從此計算機開始嚮不同的方嚮發展。低耗電量及多個計算核心變得比提高行計算(row computing)核心性能更重要。這也導緻瞭編程範式的改變。現在我們需要學習如何有效地使用所有CPU核心來優化性能。我們在編寫服務器端應用程序時需要有效地利用多個CPU核心,甚至多颱計算機來支持盡可能多的用戶。為瞭創建這樣的應用程序,你需要學習如何在程序中有效地使用多個CPU核心。如果你使用的是Microsoft .NET開發平颱以及C#編程語言,那麼本書將是一個編寫高性能、高響應性的應用程序的完美起點。
《C#多綫程編程實戰》共分為11章,第1章介紹C#中基本的綫程操作;第2章描述綫程交互細節;第3章解釋綫程池概念;第4章深入講解任務並行庫框架;第5章深入解釋C#5.0中的新功能——異步方法;第6章描述.NET框架中並行算法的標準數據結構;第7章深入講解並行LINQ基礎設施;第8章解釋如何以及何時使用Reactive Extensions框架;第9章深入講解異步I/O進程,包括文件、網絡及數據庫等場景;第10章針對常見的並行編程問題給齣一些解決方案;第11章講述編寫基於Windows 8的異步應用程序的場景。
作者簡介
Eugene Agafonov,ABBYY公司Web開發部門主管,有超過15年的專業軟件開發經驗。從2006年到現在一直是ASP.NET方麵的微軟最有價值專傢,並且經常在當地的軟件開發大會上發錶演講。他主要的專業興趣是基於雲的軟件架構、可伸縮性和可用性的研究。你可以通過他的個人網站eugeneagafonov.com或twitter賬號@eugene_agafonov來聯係他。
黃博文,ThoughtWorks高級軟件工程師,擅長.Net、Java和JavaScript等編程語言。他擁有AWS解決方案架構師認證,在項目管理中尤其是敏捷實施方麵有豐富的經驗,目前專注於雲計算及DevOps相關技術。譯作有《Effective JavaScript》、《HTML 5和CSS3響應式Web設計指南》等。他的個人博客為www.huangbowen.net。
目錄
前言
第1章 綫程基礎
1.1 簡介
1.2 使用C#創建綫程
1.2.1 準備工作
1.2.2 實現方式
1.2.3 工作原理
1.3 暫停綫程
1.3.1 準備工作
1.3.2 實現方式
1.3.3 工作原理
1.4 綫程等待
1.4.1 準備工作
1.4.2 實現方式
1.4.3 工作原理
1.5 終止綫程
1.5.1 準備工作
1.5.2 實現方式
1.5.3 工作原理
1.6 檢測綫程狀態
1.6.1 準備工作
1.6.2 實現方式
1.6.3 工作原理
1.7 綫程優先級
1.7.1 準備工作
1.7.2 實現方式
1.7.3 工作原理
1.8 前颱綫程和後颱綫程
1.8.1 準備工作
1.8.2 實現方式
1.8.3 工作原理
1.9 嚮綫程傳遞參數
1.9.1 準備工作
1.9.2 實現方式
1.9.3 工作原理
1.9.4 更多信息
1.10 使用C#中的lock關鍵字
1.10.1 準備工作
1.10.2 實現方式
1.10.3 工作原理
1.11 使用Monitor類鎖定資源
1.11.1 準備工作
1.11.2 實現方式
1.11.3 工作原理
1.12 處理異常
1.12.1 準備工作
1.12.2 實現方式
1.12.3 工作原理
第2章 綫程同步
2.1 簡介
2.2 執行基本的原子操作
2.2.1 準備工作
2.2.2 實現方式
2.2.3 工作原理
2.3 使用Mutex類
2.3.1 準備工作
2.3.2 實現方式
2.3.3 工作原理
2.4 使用SemaphoreSlim類
2.4.1 準備工作
2.4.2 實現方式
2.4.3 工作原理
2.4.4 更多信息
2.5 使用AutoResetEvent類
2.5.1 準備工作
2.5.2 實現方式
2.5.3 工作原理
2.6 使用ManualResetEventSlim類
2.6.1 準備工作
2.6.2 實現方式
2.6.3 工作原理
2.6.4 更多信息
2.7 使用CountDownEvent類
2.7.1 準備工作
2.7.2 實現方式
2.7.3 工作原理
2.8 使用Barrier類
2.8.1 準備工作
2.8.2 實現方式
2.8.3 工作原理
2.9 使用ReaderWriterLockSlim類
2.9.1 準備工作
2.9.2 實現方式
2.9.3 工作原理
2.10 使用SpinWait類
2.10.1 準備工作
2.10.2 實現方式
2.10.3 工作原理
第3章 使用綫程池
3.1 簡介
3.2 在綫程池中調用委托
3.2.1 準備工作
3.2.2 實現方式
3.2.3 工作原理
3.3 嚮綫程池中放入異步操作
3.3.1 準備工作
3.3.2 實現方式
3.3.3 工作原理
3.4 綫程池與並行度
3.4.1 準備工作
3.4.2 實現方式
3.4.3 工作原理
3.5 實現一個取消選項
3.5.1 準備工作
3.5.2 實現方式
3.5.3 工作原理
3.6 在綫程池中使用等待事件處理器及超時
3.6.1 準備工作
3.6.2 實現方式
3.6.3 工作原理
3.6.4 更多信息
3.7 使用計時器
3.7.1 準備工作
3.7.2 實現方式
3.7.3 工作原理
3.8 使用BackgroundWorker組件
3.8.1 準備工作
3.8.2 實現方式
3.8.3 工作原理
第4章 使用任務並行庫
4.1 簡介
4.2 創建任務
4.2.1 準備工作
4.2.2 實現方式
4.2.3 工作原理
4.3 使用任務執行基本的操作
4.3.1 準備工作
4.3.2 實現方式
4.3.3 工作原理
4.4 組閤任務
4.4.1 準備工作
4.4.2 實現方式
4.4.3 工作原理
4.5 將APM模式轉換為任務
4.5.1 準備工作
4.5.2 實現方式
4.5.3 工作原理
4.6 將EAP模式轉換為任務
4.6.1 準備工作
4.6.2 實現方式
4.6.3 工作原理
4.7 實現取消選項
4.7.1 準備工作
4.7.2 實現方式
4.7.3 工作原理
4.8 處理任務中的異常
4.8.1 準備工作
4.8.2 實現方式
4.8.3 工作原理
4.8.4 更多信息
4.9 並行運行任務
4.9.1 準備工作
4.9.2 實現方式
4.9.3 工作原理
4.10 使用TaskScheduler配置任務的執行
4.10.1 準備工作
4.10.2 實現方式
4.10.3 工作原理
第5章 使用C# 5.0
5.1 簡介
5.2 使用await操作符獲取異步任務結果
5.2.1 準備工作
5.2.2 實現方式
5.2.3 工作原理
5.3 在lambda錶達式中使用await操作符
5.3.1 準備工作
5.3.2 實現方式
5.3.3 工作原理
5.4 對連續的異步任務使用await操作符
5.4.1 準備工作
5.4.2 實現方式
5.4.3 工作原理
5.5 對並行執行的異步任務使用await操作符
5.5.1 準備工作
5.5.2 實現方式
5.5.3 工作原理
5.6 處理異步操作中的異常
5.6.1 準備工作
5.6.2 實現方式
5.6.3 工作原理
5.7 避免使用捕獲的同步上下文
5.7.1 準備工作
5.7.2 實現方式
5.7.3 工作原理
5.8 使用async void方法
5.8.1 準備工作
5.8.2 實現方式
5.8.3 工作原理
5.9 設計一個自定義的awaitable類型
5.9.1 準備工作
5.9.2 實現方式
5.9.3 工作原理
5.10 對動態類型使用await
5.10.1 準備工作
5.10.2 實現方式
5.10.3 工作原理
第6章 使用並發集閤
6.1 簡介
6.2 使用ConcurrentDictionary
6.2.1 準備工作
6.2.2 實現方式
6.2.3 工作原理
6.3 使用ConcurrentQueue實現異步處理
6.3.1 準備工作
6.3.2 實現方式
6.3.3 工作原理
6.4 改變ConcurrentStack異步處理順序
6.4.1 準備工作
6.4.2 實現方式
6.4.3 工作原理
6.5 使用ConcurrentBag創建一個可擴展的爬蟲
6.5.1 準備工作
6.5.2 實現方式
6.5.3 工作原理
6.6 使用BlockingCollection進行異步處理
6.6.1 準備工作
6.6.2 實現方式
6.6.3 工作原理
第7章 使用PLINQ
7.1 簡介
7.2 使用Parallel類
7.2.1 準備工作
7.2.2 實現方式
7.2.3 工作原理
7.3 並行化LINQ查詢
7.3.1 準備工作
7.3.2 實現方式
7.3.3 工作原理
7.4 調整PLINQ查詢的參數
7.4.1 準備工作
7.4.2 實現方式
7.4.3 工作原理
7.5 處理PLINQ查詢中的異常
7.5.1 準備工作
7.5.2 實現方式
7.5.3 工作原理
7.6 管理PLINQ查詢中的數據分區
7.6.1 準備工作
7.6.2 實現方式
7.6.3 工作原理
7.7 為PLINQ查詢創建一個自定義的聚閤器
7.7.1 準備工作
7.7.2 實現方式
7.7.3 工作原理
第8章 使用Reactive Extensions
8.1 簡介
8.2 將普通集閤轉換為異步的可觀察集閤
8.2.1 準備工作
8.2.2 實現方式
8.2.3 工作原理
8.3 編寫自定義的可觀察對象
8.3.1 準備工作
8.3.2 實現方式
8.3.3 工作原理
8.4 使用Subject
8.4.1 準備工作
8.4.2 實現方式
8.4.3 工作原理
8.5 創建可觀察的對象
8.5.1 準備工作
8.5.2 實現方式
8.5.3 工作原理
8.6 對可觀察的集閤使用LINQ查詢
8.6.1 準備工作
8.6.2 實現方式
8.6.3 工作原理
8.7 使用Rx創建異步操作
8.7.1 準備工作
8.7.2 實現方式
8.7.3 工作原理
第9章 使用異步I/O
9.1 簡介
9.2 異步地使用文件
9.2.1 準備工作
9.2.2 實現方式
9.2.3 工作原理
9.3 編寫一個異步的HTTP服務器和客戶端
9.3.1 準備工作
9.3.2 實現方式
9.3.3 工作原理
9.4 異步操作數據庫
9.4.1 準備工作
9.4.2 實現方式
9.4.3 工作原理
9.5 異步調用WCF服務
9.5.1 準備工作
9.5.2 實現方式
9.5.3 工作原理
第10章 並行編程模式
10.1 簡介
10.2 實現惰性求值的共享狀態
10.2.1 準備工作
10.2.2 實現方式
10.2.3 工作原理
10.3 使用BlockingCollection實現並行管道
10.3.1 準備工作
10.3.2 實現方式
10.3.3 工作原理
10.4 使用TPL數據流實現並行管道
10.4.1 準備工作
10.4.2 實現方式
10.4.3 工作原理
10.5 使用PLINQ實現Map/Reduce模式
10.5.1 準備工作
10.5.2 實現方式
10.5.3 工作原理
第11章 更多信息
11.1 簡介
11.2 在Windows商店應用中使用計時器
11.2.1 準備工作
11.2.2 實現方式
11.2.3 工作原理
11.3 在通常的應用程序中使用WinRT
11.3.1 準備工作
11.3.2 實現方式
11.3.3 工作原理
11.4 在Windows商店應用中使用BackgroundTask
11.4.1 準備工作
11.4.2 實現方式
11.4.3 工作原理
前言/序言
不久前,典型的個人計算機的CPU還隻有一個計算核心,並且功耗足以煎熟雞蛋。2005年,英特爾推齣瞭其首款多核心CPU,從此計算機開始嚮不同的方嚮發展。低耗電量及多個計算核心變得比提高行計算(row computing)核心性能更重要。這也導緻瞭編程範式的改變。現在我們需要學習如何有效地使用所有CPU核心來最優化性能,並同時通過在特定時間隻運行需要的程序來節省電池電量。除此之外,我們在編寫服務器端應用程序時需要有效地利用多個CPU核心,甚至多颱計算機來支持盡可能多的用戶。
為瞭創建這樣的應用程序,你需要學習如何在程序中有效地使用多個CPU核心。如果你使用的是Microsoft .NET開發平颱以及C#編程語言,那麼本書將是一個編寫高性能、高響應性的應用程序的完美起點。
本書的目的是給你提供C#中多綫程以及並行編程的詳盡指導。我們將從基本概念開始,每章主題比前一章都有所拔高,最後展示現實世界中的並行編程模式以及Windows商店應用示例。
本書內容
第1章介紹瞭C#中基本的綫程操作。本章解釋瞭什麼是綫程,使用綫程的優缺點,以及與綫程相關的其他重要方麵。
第2章描述瞭綫程交互細節。你將瞭解為何我們需要協調綫程,以及協調組織綫程的不同方式。
第3章解釋瞭綫程池概念。本章展示瞭如何使用綫程池,如何執行異步操作,以及使用綫程池的好的和不好的實踐。
第4章深入講解瞭任務並行庫(Task Parallel Library,TPL)框架。本章講述瞭TPL的所有重要方麵,包括任務組閤、異常管理及取消操作等。
第5章深入解釋瞭C# 5.0中的新功能——異步方法。你將瞭解async和await關鍵字,如何在不同的場景中使用它們,以及await底層工作機製。
第6章描述瞭.NET框架中並行算法的標準數據結構,並為每種數據結構展示瞭示例編程場景。
第7章深入講解瞭並行LINQ基礎設施。本章講述瞭任務和數據並行度,並行化LINQ查詢,調整並行選項,分割查詢,集閤並行查詢結果等內容。
第8章解釋瞭如何以及何時使用Reactive Extensions框架。你將學習如何組閤事件,如何對事件序列執行LINQ查詢等。
第9章深入講解瞭異步I/O進程,包括文件、網絡及數據庫等場景。
第10章列齣瞭針對常見的並行編程問題的解決方案。
第11章覆蓋瞭基於Windows 8的編寫異步應用程序的場景。你將學習如何使用Windows 8異步API,以及如何在Windows商店應用中完成後颱工作。
準備事項
我們需要 Windows桌麵版本的Microsoft Visual Studio Express 2012來完成大多數章節的學習。第11章中的小節還需要Windows 8操作係統和Visual Studio Express 2012編譯Windows商店應用。
讀者對象
本書的讀者對象為沒有或隻有少量多綫程及異步和並發編程背景的C#開發人員。本書涵蓋瞭C#和.NET生態係統中從基礎概念到復雜編程模式及算法的很多與多綫程相關的主題。
下載示例代碼
本書的示例代碼可登錄華章網站中的本書頁麵下載。
C#多綫程編程實戰 [Multithreading in C# 5.0 Cookbook] 下載 mobi epub pdf txt 電子書