![](/c3/69772390311.jpg)
出版社:清華大學出版社 ISBN:9787302549598 商品編碼:69772390311 品牌:文軒 出版時間:2020-05-01 代碼:128 作者:裡卡爾多·特雷爾(RiccardoTerre
"![](http://img14.360buyimg.com/cms/jfs/t1/203358/9/26405/134589/62f4a34cEcdefae53/84e082ed3b03dbc0.jpg) 作 者:(美)裡卡爾多·特雷爾(Riccardo Terrell) 著 葉偉民 譯 定 價:128 出 版 社:清華大學出版社 出版日期:2020年05月01日 頁 數:538 裝 幀:平裝 ISBN:9787302549598 "要充分釋放你的多處理器計算機的很好性能,這樣並發應用程序會運行得更快,因為它們跨處理器內核分散工作,同時執行多個任務。.NET平臺上的現代化工具和技術(包括並行?LINQ、函數式編程、異步編程和任務並行庫)十分強大,替代了傳統的基於線程的並發解決方案。 《.NET並發編程實戰》一書將教你編寫代碼以提供性能敏感型應用程序所需的速度。本書以?C#?和?F#?中的示例指導你完成在理論和實踐上強調函數式編程的並發和並行設計。你將從並發的基礎開始,掌握基等 ●第Ⅰ部分函數式編程在並發程序中所體現的優勢 第1章函數式並發基礎3 1.1你將從本書中學到什麼4 1.2讓我們從術語開始5 1.2.1順序編程——一次執行一個任務6 1.2.2並發編程——同時運行多個任務7 1.2.3並行編程——同時執行多個任務8 1.2.4多任務處理——同時在一段時間內執行多個任務9 1.2.5多線程性能調優10 1.3為什麼需要並發11 1.4並發編程的陷阱14 1.4.1並發的危害14 1.4.2共享狀態的演變17 1.4.3一個簡單的真實示例:並行快速排序17 1.4.4F#中的基準測試21 1.5為什麼選擇函數式編程實現並發21 1.6擁抱函數式範式24 1.7為什麼選擇F#和C#進行函數式並發編程25 1.8本章小結27 第2章並發函數式編程技術29 2.1使用函數組合解決復雜的問題30 2.1.1C#的函數組合30 2.1.2F#的函數組合32 2.2閉包簡化函數式思考33 2.2.1使用lambda表達式捕獲閉包中的變量34 2.2.2多線程環境中的閉包36 2.3用於程序加速的記憶化緩存技術38 2.4記憶快速網絡爬蟲的操作42 2.5延遲記憶化以獲得更好的性能46 2.6有效率的並行推測以攤銷昂貴計算成本47 2.6.1具有天然函數支持的預計算50 2.6.2使很好計算獲勝51 2.7延遲是件好事情52 2.7.1對嚴格求值語言並發行為的理解52 2.7.2延遲緩存技術和線程安全的單例模式54 2.7.3F#中的延遲支持55 2.7.4延遲和任務,一個強大的組合55 2.8本章小結57 第3章函數式數據結構和不可變性59 3.1真實世界的例子:捕獵線程不安全的對像60 3.1.1.NET不可變集合:一種安全的解決方案63 3.1.2.NET並發集合:更快的解決方案67 3.1.3代理消息傳遞模式:更快、更好的解決方案69 3.2在線程之間安全地共享函數式數據結構72 3.3修改的不可變性73 3.3.1數據並行的函數式數據結構75 3.3.2使用不可變性的性能影響75 3.3.3C#的不可變性76 3.3.4F#的不可變性79 3.3.5函數式列表:連接一條鏈格80 3.3.6構建可持久化數據結構:不可變二叉樹86 3.4遞歸函數:一種自然的迭代方式89 3.4.1正確遞歸函數尾部:尾部調用優化90 3.4.2延續傳遞風格以優化遞歸函數91 3.5本章小結95 第Ⅱ部分如何處理並發程序的不同部分 第4章處理大數據的基礎:數據並行,第1部分99 4.1什麼是數據並行100 4.1.1數據和任務並行101 4.1.2“尷尬並行”概念102 4.1.3.NET中的數據並行支持102 4.2Fork/Join模式:並行Mandelbrot103 4.2.1當GC是瓶頸時:結構與類對像109 4.2.2並行循環的缺點111 4.3測量性能速度111 4.3.1Amdahl定律定義了性能改進的極限112 4.3.2Gustafson定律:進一步衡量性能改進113 4.3.3並行循環的局限性:素數之和113 4.3.4簡單循環可能會出現什麼問題115 4.3.5聲明式並行編程模型117 4.4本章小結118 第5章PLINQ和MapReduce:數據並行,第2部分121 5.1PLINQ簡介122 5.1.1PLINQ如何更具函數式123 5.1.2PLINQ和純函數:並行字計數器123 5.1.3使用純函數避免副作用125 5.1.4隔離和控制副作用:重構並行字計數器127 5.2並行聚合和歸約數據128 5.2.1擇伐(Deforesting):折疊的諸多優點之一130 5.2.2PLINQ中的fold:Aggregate函數131 5.2.3為PLINQ實現並行Reduce函數137 5.2.4F#的並行列表解析:PSeq139 5.2.5F#的並行數組140 5.3並行MapReduce模式142 5.3.1Map和Reduce函數143 5.3.2在NuGet包庫中使用MapReduce144 5.4本章小結149 第6章實時事件流:函數式反應式編程151 6.1反應式編程:大事件處理152 6.2用於反應式編程的.NET工具155 6.2.1事件組合器——更好的解決方案156 6.2.2.NET與F#組合器的互操作性157 6.3.NET中的反應式編程:反應式擴展(Rx)160 6.3.1從LINQ/PLINQ到Rx162 6.3.2IObservable:對偶IEnumerable163 6.3.3Action中的反應式擴展164 6.3.4Rx實時流165 6.3.5從事件到F#Observable166 6.4馴服事件流:使用Rx編程進行Twitter情緒分析167 6.5Rx發布者-訂閱者176 6.5.1為強大的發布者-訂閱者集線器使用Subject類型176 6.5.2與並發相關的Rx177 6.5.3實現可重用的Rx發布者-訂閱者178 6.5.4使用RxPub-Sub類分析推文情緒180 6.5.5action中的觀察者183 6.5.6方便的F#對像表達式184 6.6本章小結184 第7章基於任務的函數式並行187 7.1任務並行的簡短介紹188 7.1.1為什麼要進行任務並行和函數式編程189 7.1.2.NET中的任務並行化支持189 7.2.NET任務並行庫191 7.3C#void的問題196 7.4延續傳遞風格(CPS):函數式控制流程198 7.4.1為什麼要利用CPS199 7.4.2等待任務完成:延續模型200 7.5組合任務操作的策略205 7.5.1使用數學模式以獲得更好的組合207 7.5.2任務使用準則212 7.6並行函數式管道模式212 7.7本章小結218 第8章最終勝出的任務異步模型219 8.1異步編程模型(APM)220 8.1.1異步編程的價值220 8.1.2可擴展性和異步編程223 8.1.3CPU密集型和I/O密集型操作223 8.2異步編程不受的並行度224 8.3.NET的異步支持225 8.3.1異步編程會破壞代碼結構228 8.3.2基於事件的異步編程228 8.4C#基於任務的異步編程229 8.4.1匿名異步lambda232 8.4.2Task是一個monadic容器232 8.5基於任務的異步編程:案例研究235 8.5.1異步取消240 8.5.2帶有monadicBind運算符的基於任務的異步組合244 8.5.3延遲異步計算以實現組合245 8.5.4如果出現問題,請重試246 8.5.5異步操作的錯誤處理247 8.5.6股票市場歷史的異步並行處理249 8.5.7任務完成後的異步股票市場並行處理251 8.6本章小結252 第9章F#的異步函數編程253 9.1異步函數式方面254 9.2什麼是F#異步工作流254 9.2.1計算表達式中的延續傳遞風格254 9.2.2異步工作流操作:AzureBlob存儲並行操作257 9.3異步計算表達式261 9.3.1計算表達式和單子之間的區別263 9.3.2異步重試:生成自己的計算表達式264 9.3.3擴展異步工作流266 9.3.4映射異步操作:Async.map函子267 9.3.5並行化異步工作流:Async.Parallel269 9.3.6異步工作流取消支持274 9.3.7馴服並行異步操作276 9.4本章小結280 第10章用於流暢式並發編程的函數式組合器281 10.1執行流並不總是處於正常情況:錯誤處理282 10.2錯誤組合器:C#中的Retry、Otherwise和Task.Catch285 10.2.1FP中的錯誤處理:流控制的異常289 10.2.2在C#中使用Task>處理錯誤291 10.2.3F#AsyncOption類型:組合Async和Option291 10.2.4F#慣用的函數式異步錯誤處理292 10.2.5使用Result類型保留異常語義294 10.3在異步操作中控制異常298 10.3.1F#使用Async和Result建模錯誤處理302 10.3.2使用monadic運算符bind擴展F#AsyncResult類型304 10.4使用函數式組合器抽像化操作308 10.5函數式組合器概要309 10.5.1TPL內置異步組合器310 10.5.2利用Task.WhenAny組合器實現冗餘和交叉311 10.5.3使用Task.WhenAll組合器進行異步for-each312 10.5.4回顧迄今看到的數學模式314 10.6最終的並行組合應用函子317 10.6.1使用應用函子運算符擴展F#異步工作流324 10.6.2帶有中綴運算符的F#應用函子語義326 10.6.3利用應用函子實現異構並行計算326 10.6.4組合和執行異構並行計算328 10.6.5使用條件異步組合器控制流330 10.6.6運用異步組合器334 10.7本章小結336 第11章使用代理應用反應式編程339 11.1什麼是反應式編程340 11.2異步消息傳遞編程模型342 11.2.1消息傳遞和不可變性的關繫344 11.2.2天然隔離344 11.3代理是什麼345 11.3.1代理的組件346 11.3.2代理可以做什麼347 11.3.3無鎖並發編程的無共享方法347 11.3.4基於代理的編程如何體現函數式思想348 11.3.5代理是面向對像的349 11.4F#代理:MailboxProcessor349 11.5使用F#MailboxProcessor避免數據庫瓶頸352 11.5.1MailboxProcessor消息類型:可區分聯合355 11.5.2MailboxProcessor雙向通信356 11.5.3在C#中使用AgentSQL357 11.5.4成組協調代理來並行工作流358 11.5.5如何使用F#MailboxProcessor處理錯誤360 11.5.6停止MailboxProcessor代理——CancellationToken361 11.5.7使用MailboxProcessor分發工作362 11.5.8使用代理緩存操作364 11.5.9由MailboxProcessor報告結果368 11.5.10使用線程池報告來自MailboxProcessor的事件371 11.6F#MailboxProcessor:10000個代理的生命遊戲371 11.7本章小結376 第12章使用TPLDataflow的並行工作流與代理編程379 12.1TPLDataflow的強大性380 12.2組合式設計:TPLDataflow塊381 12.2.1使用BufferBlock作為FIFO緩衝區382 12.2.2使用TransformBlock轉換數據383 12.2.3使用ActionBlock完成工作384 12.2.4連接數據流塊385 12.3使用TDF實現復雜的生產者/消費者386 12.3.1多生產者/單消費者模式386 12.3.2單生產者/多消費者模式387 12.4使用TPLDataflow在C#中啟用代理模型388 12.4.1代理折疊狀態和消息:聚合392 12.4.2代理交互:並行單詞計數器392 12.5壓縮和加密大型流的並行工作流397 12.5.1上下文:處理大型數據流的問題397 12.5.2確保消息流的順序完整性402 12.5.3連接、傳播和完成403 12.5.4構建TDF工作流的規則405 12.5.5組合ReactiveExtensions(Rx)和TDF406 12.6本章小結407 第Ⅲ部分現代並發編程模式應用 第13章成功的並發編程的配方和設計模式411 13.1循環利用對像以減少內存消耗412 13.2自定義並行Fork/Join運算符415 13.3並行具有依賴關繫的任務:設計代碼以優化性能418 13.4用於協調並發I/O操作共享資源的閘門:一次寫入,多次讀取423 13.5線程安全的隨機數生成器430 13.6多態事件聚合器432 13.7自定義Rx調度程序來控制並行度435 13.8並發的反應式可擴展客戶端/服務器438 13.9可復用的自定義高性能並行filter-map運算符448 13.10無阻塞同步消息傳遞模型452 13.11使用代理編程模型協調並發作業457 13.12組合monadic函數462 13.13本章小結465 第14章使用並發函數式編程構建可擴展的移動應用程序467 14.1現實世界服務器上的函數式編程468 14.2如何設計一個成功的高性能應用程序469 14.2.1秘制醬:ACD470 14.2.2不同的異步模式:將工作排隊以稍後執行470 14.3選擇正確的並發編程模型472 14.4實時交易:股票市場示例的高層架構475 14.5股票市場應用程序的基本要素479 14.6編寫股票市場交易應用程序479 14.7本章小結501 附錄A函數式編程503 附錄BF#概述517 附錄CF#異步工作流和.NETTask之間的互操作性535 要充分釋放你的多處理器計算機的很好性能,這樣並發應用程序會運行得更快,因為它們跨處理器內核分散工作,同時執行多個任務。.NET平臺上的現代化工具和技術(包括並行LINQ、函數式編程、異步編程和任務並行庫)十分強大,替代了傳統的基於線程的並發解決方案。 《.NET並發編程實戰》一書將教你編寫代碼以提供性能敏感型應用程序所需的速度。本書以C#和F#中的示例指導你完成在理論和實踐上強調函數式編程的並發和並行設計。你將從並發的基礎開始,掌握基本技術和設計實踐,以優化在現代多處理器繫統上運行的代碼。 (美)裡卡爾多·特雷爾(Riccardo Terrell) 著 葉偉民 譯 "Riccardo Terrell是一位經驗豐富的軟件工程師和微軟 MVP,他熱衷於函數式編程。Riccardo在競爭激烈的商業環境中提供具有高商業價值的技術解決方案方面擁有超過20年的經驗。1998年,Riccardo在意大利創辦了自己的軟件公司,專門為客戶提供定制的醫療軟件。2007年,Riccardo移居美國,此後一直擔任. NET高級軟件開發人員和高級軟件架構師,在業務環境中提供經濟高效的技術解決方案。Riccardo致力於集成優選技術工具,以讓組織內部溝通更高效,提高工作效率並降低運營成本。他積極參與函數式編程社區,包括.NET會議和國際會議並廣為人知。Riccardo相信多等 ![](https://img10.360buyimg.com/imgzone/jfs/t1/147514/7/5440/73116/5f34a3beE3ba58783/f5b2391383f5625c.jpg)
" |