注冊 | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當(dāng)前位置: 首頁出版圖書科學(xué)技術(shù)工業(yè)技術(shù)建筑科學(xué)建筑設(shè)計.NET并發(fā)編程實戰(zhàn)

.NET并發(fā)編程實戰(zhàn)

.NET并發(fā)編程實戰(zhàn)

定 價:¥128.00

作 者: (美),里卡爾多·特雷爾
出版社: 清華大學(xué)出版社
叢編項:
標(biāo) 簽: 暫缺

ISBN: 9787302549598 出版時間: 2020-05-01 包裝: 平裝
開本: 16開 頁數(shù): 564 字?jǐn)?shù):  

內(nèi)容簡介

  要充分釋放你的多處理器計算機(jī)的卓越性能,這樣并發(fā)應(yīng)用程序會運行得更快,因為它們跨處理器內(nèi)核分散工作,同時執(zhí)行多個任務(wù)。.NET平臺上的現(xiàn)代化工具和技術(shù)(包括并行 LINQ、函數(shù)式編程、異步編程和任務(wù)并行庫)十分強(qiáng)大,替代了傳統(tǒng)的基于線程的并發(fā)解決方案。 《.NET并發(fā)編程實戰(zhàn)》一書將教你編寫代碼以提供性能敏感型應(yīng)用程序所需的速度。本書以 C# 和 F# 中的示例指導(dǎo)你完成在理論和實踐上強(qiáng)調(diào)函數(shù)式編程的并發(fā)和并行設(shè)計。你將從并發(fā)的基礎(chǔ)開始,掌握基本技術(shù)和設(shè)計實踐,以優(yōu)化在現(xiàn)代多處理器系統(tǒng)上運行的代碼。

作者簡介

  作者簡介:Riccardo Terrell是一位經(jīng)驗豐富的軟件工程師和微軟 MVP,他熱衷于函數(shù)式編程。Riccardo在競爭激烈的商業(yè)環(huán)境中提供具有高商業(yè)價值的技術(shù)解決方案方面擁有超過20年的經(jīng)驗。1998年,Riccardo在意大利創(chuàng)辦了自己的軟件公司,專門為客戶提供定制的醫(yī)療軟件。2007年,Riccardo移居美國,此后一直擔(dān)任. NET高級軟件開發(fā)人員和高級軟件架構(gòu)師,在業(yè)務(wù)環(huán)境中提供經(jīng)濟(jì)高效的技術(shù)解決方案。Riccardo致力于集成先進(jìn)技術(shù)工具,以讓組織內(nèi)部溝通更高效,提高工作效率并降低運營成本。他積極參與函數(shù)式編程社區(qū),包括.NET會議和國際會議并廣為人知。Riccardo相信多種范式混合編程是能夠最大限度地發(fā)揮代碼力量的一種機(jī)制。 譯者簡介葉偉民 廣州.NET技術(shù)俱樂部主席、中國香港Azure/.NET技術(shù)俱樂部創(chuàng)始人兼主席、.NET社區(qū)聯(lián)盟建設(shè)者,在.NET編程領(lǐng)域有15年工作經(jīng)驗。

圖書目錄

第Ⅰ部分  函數(shù)式編程在并發(fā)程序中所體現(xiàn)的優(yōu)勢
第1章  函數(shù)式并發(fā)基礎(chǔ)   3
1.1  你將從本書中學(xué)到什么   4
1.2  讓我們從術(shù)語開始   5
1.2.1  順序編程——一次執(zhí)行一個任務(wù)   6
1.2.2  并發(fā)編程——同時運行多個任務(wù)   7
1.2.3  并行編程——同時執(zhí)行多個任務(wù)   8
1.2.4  多任務(wù)處理——同時在一段時間內(nèi)執(zhí)行多個任務(wù)   9
1.2.5  多線程性能調(diào)優(yōu)   10
1.3  為什么需要并發(fā)   11
1.4  并發(fā)編程的陷阱   14
1.4.1  并發(fā)的危害   14
1.4.2  共享狀態(tài)的演變   17
1.4.3  一個簡單的真實示例:并行快速排序   17
1.4.4  F#中的基準(zhǔn)測試   21
1.5  為什么選擇函數(shù)式編程實現(xiàn)并發(fā)   21
1.6  擁抱函數(shù)式范式   24
1.7  為什么選擇F#和C#進(jìn)行函數(shù)式并發(fā)編程   25
1.8  本章小結(jié)   27
第2章  并發(fā)函數(shù)式編程技術(shù)   29
2.1  使用函數(shù)組合解決復(fù)雜的問題   30
2.1.1  C#的函數(shù)組合   30
2.1.2  F#的函數(shù)組合   32
2.2  閉包簡化函數(shù)式思考   33
2.2.1  使用lambda表達(dá)式捕獲閉包中的變量   34
2.2.2  多線程環(huán)境中的閉包   36
2.3  用于程序加速的記憶化緩存技術(shù)   38
2.4  記憶快速網(wǎng)絡(luò)爬蟲的操作   42
2.5  延遲記憶化以獲得更好的性能   46
2.6  有效率的并行推測以攤銷昂貴計算成本   47
2.6.1  具有天然函數(shù)支持的預(yù)計算   50
2.6.2  使計算獲勝   51
2.7  延遲是件好事情   52
2.7.1  對嚴(yán)格求值語言并發(fā)行為的理解   52
2.7.2  延遲緩存技術(shù)和線程安全的單例模式   54
2.7.3  F#中的延遲支持   55
2.7.4  延遲和任務(wù),一個強(qiáng)大的組合   55
2.8  本章小結(jié)   57
第3章  函數(shù)式數(shù)據(jù)結(jié)構(gòu)和不可變性   59
3.1  真實世界的例子:捕獵線程不安全的對象   60
3.1.1  .NET不可變集合:一種安全的解決方案   63
3.1.2  .NET并發(fā)集合:更快的解決方案   67
3.1.3  代理消息傳遞模式:更快、更好的解決方案   69
3.2  在線程之間安全地共享函數(shù)式數(shù)據(jù)結(jié)構(gòu)   72
3.3  修改的不可變性   73
3.3.1  數(shù)據(jù)并行的函數(shù)式數(shù)據(jù)結(jié)構(gòu)   75
3.3.2  使用不可變性的性能影響   75
3.3.3  C#的不可變性   76
3.3.4  F#的不可變性   79
3.3.5  函數(shù)式列表:連接一條鏈中的單元格   80
3.3.6  構(gòu)建可持久化數(shù)據(jù)結(jié)構(gòu):不可變二叉樹   86
3.4  遞歸函數(shù):一種自然的迭代方式   89
3.4.1  正確遞歸函數(shù)尾部:尾部調(diào)用優(yōu)化   90
3.4.2  延續(xù)傳遞風(fēng)格以優(yōu)化遞歸函數(shù)   91
3.5  本章小結(jié)   95
 
 第Ⅱ部分  如何處理并發(fā)程序的不同部分
第4章  處理大數(shù)據(jù)的基礎(chǔ):數(shù)據(jù)并行,第1部分   99
4.1  什么是數(shù)據(jù)并行   100
4.1.1  數(shù)據(jù)和任務(wù)并行   101
4.1.2  “尷尬并行”概念   102
4.1.3  .NET中的數(shù)據(jù)并行支持   102
4.2  Fork / Join模式:并行Mandelbrot   103
4.2.1  當(dāng)GC是瓶頸時:結(jié)構(gòu)與類對象   109
4.2.2  并行循環(huán)的缺點   111
4.3  測量性能速度   111
4.3.1  Amdahl定律定義了性能改進(jìn)的極限   112
4.3.2  Gustafson定律:進(jìn)一步衡量性能改進(jìn)   113
4.3.3  并行循環(huán)的局限性:素數(shù)之和   113
4.3.4  簡單循環(huán)可能會出現(xiàn)什么問題   115
4.3.5  聲明式并行編程模型   117
4.4  本章小結(jié)   118
第5章  PLINQ和MapReduce:數(shù)據(jù)并行,第2部分   121
5.1  PLINQ簡介   122
5.1.1  PLINQ如何更具函數(shù)式   123
5.1.2  PLINQ和純函數(shù):并行字計數(shù)器   123
5.1.3  使用純函數(shù)避免副作用   125
5.1.4  隔離和控制副作用:重構(gòu)并行字計數(shù)器   127
5.2  并行聚合和歸約數(shù)據(jù)   128
5.2.1  擇伐(Deforesting):折疊的諸多優(yōu)點之一   130
5.2.2  PLINQ中的fold:Aggregate函數(shù)   131
5.2.3  為PLINQ實現(xiàn)并行Reduce函數(shù)   137
5.2.4  F#的并行列表解析:PSeq   139
5.2.5  F#的并行數(shù)組   140
5.3  并行MapReduce模式   142
5.3.1  Map和Reduce函數(shù)   143
5.3.2  在NuGet 包庫中使用 MapReduce   144
5.4  本章小結(jié)   149
第6章  實時事件流:函數(shù)式反應(yīng)式編程   151
6.1  反應(yīng)式編程: 大事件處理   152
6.2  用于反應(yīng)式編程的.NET工具   155
6.2.1  事件組合器——更好的解決方案   156
6.2.2  .NET與F#組合器的互操作性   157
6.3  .NET中的反應(yīng)式編程:反應(yīng)式擴(kuò)展(Rx)   160
6.3.1  從LINQ/PLINQ到Rx   162
6.3.2  IObservable:對偶IEnumerable   163
6.3.3  Action中的反應(yīng)式擴(kuò)展   164
6.3.4  Rx實時流   165
6.3.5  從事件到F# Observable   166
6.4  馴服事件流:使用Rx編程進(jìn)行Twitter情緒分析   167
6.5  Rx發(fā)布者-訂閱者   176
6.5.1  為強(qiáng)大的發(fā)布者-訂閱者集線器使用Subject類型   176
6.5.2  與并發(fā)相關(guān)的Rx   177
6.5.3  實現(xiàn)可重用的Rx發(fā)布者-訂閱者   178
6.5.4  使用Rx Pub-Sub類分析推文情緒   180
6.5.5  action中的觀察者   183
6.5.6  方便的F#對象表達(dá)式   184
6.6  本章小結(jié)   184
第7章  基于任務(wù)的函數(shù)式并行   187
7.1  任務(wù)并行的簡短介紹   188
7.1.1  為什么要進(jìn)行任務(wù)并行和函數(shù)式編程   189
7.1.2  .NET中的任務(wù)并行化支持   189
7.2  .NET任務(wù)并行庫   191
7.3  C# void的問題   196
7.4  延續(xù)傳遞風(fēng)格(CPS):函數(shù)式控制流程   198
7.4.1  為什么要利用CPS   199
7.4.2  等待任務(wù)完成:延續(xù)模型   200
7.5  組合任務(wù)操作的策略   205
7.5.1  使用數(shù)學(xué)模式以獲得更好的組合   207
7.5.2  任務(wù)使用準(zhǔn)則   212
7.6  并行函數(shù)式管道模式   212
7.7  本章小結(jié)   218
第8章  終勝出的任務(wù)異步模型   219
8.1  異步編程模型(APM)   220
8.1.1  異步編程的價值   220
8.1.2  可擴(kuò)展性和異步編程   223
8.1.3  CPU密集型和I/O密集型操作   223
8.2  異步編程不受限制的并行度   224
8.3  .NET的異步支持   225
8.3.1  異步編程會破壞代碼結(jié)構(gòu)   228
8.3.2  基于事件的異步編程   228
8.4  C#基于任務(wù)的異步編程   229
8.4.1  匿名異步lambda   232
8.4.2  Task是一個monadic容器   232 8.5  基于任務(wù)的異步編程:案例研究   235
8.5.1  異步取消   240
8.5.2  帶有monadic Bind運算符的基于任務(wù)的異步組合   244
8.5.3  延遲異步計算以實現(xiàn)組合   245
8.5.4  如果出現(xiàn)問題,請重試   246
8.5.5  異步操作的錯誤處理   247
8.5.6  股票市場歷史的異步并行處理   249
8.5.7  任務(wù)完成后的異步股票市場并行處理   251
8.6  本章小結(jié)   252
第9章  F#的異步函數(shù)編程   253
9.1  異步函數(shù)式方面   254
9.2  什么是F#異步工作流   254
9.2.1  計算表達(dá)式中的延續(xù)傳遞風(fēng)格   254
9.2.2  異步工作流操作:Azure Blob存儲并行操作   257
9.3  異步計算表達(dá)式   261
9.3.1  計算表達(dá)式和單子之間的區(qū)別   263
9.3.2  異步重試:生成自己的計算表達(dá)式   264
9.3.3  擴(kuò)展異步工作流   266
9.3.4  映射異步操作:Async.map函子   267
9.3.5  并行化異步工作流:Async.Parallel   269
9.3.6  異步工作流取消支持   274
9.3.7  馴服并行異步操作   276
9.4  本章小結(jié)   280
第10章  用于流暢式并發(fā)編程的函數(shù)式組合器   281
10.1  執(zhí)行流并不總是處于正常情況:錯誤處理   282
10.2  錯誤組合器:C#中的Retry、Otherwise和Task.Catch   285
10.2.1  FP中的錯誤處理:流控制的異常   289
10.2.2  在C#中使用Task<>>處理錯誤   291 10.2.3  F# AsyncOption類型:組合Async和Option   291
10.2.4  F#慣用的函數(shù)式異步錯誤處理   292
10.2.5  使用Result類型保留異常語義   294
10.3  在異步操作中控制異常   298
10.3.1  F#使用Async和Result 建模錯誤處理   302
10.3.2  使用monadic運算符bind擴(kuò)展F# AsyncResult類型   304
10.4  使用函數(shù)式組合器抽象化操作   308
10.5  函數(shù)式組合器概要   309
10.5.1  TPL內(nèi)置異步組合器   310
10.5.2  利用Task.WhenAny組合器實現(xiàn)冗余和交叉   311
10.5.3  使用Task.WhenAll組合器進(jìn)行異步for-each   312
10.5.4  回顧迄今看到的數(shù)學(xué)模式   314
10.6  終的并行組合應(yīng)用函子   317
10.6.1  使用應(yīng)用函子運算符擴(kuò)展F#異步工作流   324
10.6.2  帶有中綴運算符的F#應(yīng)用函子語義   326
10.6.3  利用應(yīng)用函子實現(xiàn)異構(gòu)并行計算   326
10.6.4  組合和執(zhí)行異構(gòu)并行計算   328
10.6.5  使用條件異步組合器控制流   330
10.6.6  運用異步組合器   334
10.7  本章小結(jié)   336
第11章  使用代理應(yīng)用反應(yīng)式編程   339
11.1  什么是反應(yīng)式編程   340
11.2  異步消息傳遞編程模型   342
11.2.1  消息傳遞和不可變性的關(guān)系   344
11.2.2  天然隔離   344
11.3  代理是什么   345
11.3.1  代理的組件   346
11.3.2  代理可以做什么   347
11.3.3  無鎖并發(fā)編程的無共享方法   347
11.3.4  基于代理的編程如何體現(xiàn)函數(shù)式思想   348
11.3.5  代理是面向?qū)ο蟮?nbsp;  349
11.4  F#代理:MailboxProcessor   349
11.5  使用F# MailboxProcessor避免數(shù)據(jù)庫瓶頸   352
11.5.1  MailboxProcessor消息類型:可區(qū)分聯(lián)合   355
11.5.2  MailboxProcessor雙向通信   356
11.5.3  在C#中使用AgentSQL   357
11.5.4  成組協(xié)調(diào)代理來并行工作流   358
11.5.5  如何使用F# MailboxProcessor處理錯誤   360
11.5.6  停止MailboxProcessor代理——CancellationToken   361
11.5.7  使用MailboxProcessor分發(fā)工作   362
11.5.8  使用代理緩存操作   364
11.5.9  由MailboxProcessor報告結(jié)果   368
11.5.10  使用線程池報告來自MailboxProcessor的事件   371
11.6  F# MailboxProcessor:10 000個代理的生命游戲   371
11.7  本章小結(jié)   376
第12章  使用TPL Dataflow的并行工作流與代理編程   379
12.1  TPL Dataflow的強(qiáng)大性   380
12.2  組合式設(shè)計:TPL Dataflow塊   381
12.2.1  使用BufferBlock作為FIFO緩沖區(qū)   382 12.2.2  使用TransformBlock轉(zhuǎn)換數(shù)據(jù)   383 12.2.3  使用ActionBlock完成工作   384 12.2.4  連接數(shù)據(jù)流塊   385
12.3  使用TDF實現(xiàn)復(fù)雜的生產(chǎn)者/消費者   386
12.3.1  多生產(chǎn)者/單消費者模式   386
12.3.2  單生產(chǎn)者/多消費者模式   387
12.4  使用TPL Dataflow在C#中啟用代理模型   388
12.4.1  代理折疊狀態(tài)和消息:聚合   392
12.4.2  代理交互:并行單詞計數(shù)器   392
12.5  壓縮和加密大型流的并行工作流   397
12.5.1  上下文:處理大型數(shù)據(jù)流的問題   397
12.5.2  確保消息流的順序完整性   402
12.5.3  連接、傳播和完成   403
12.5.4  構(gòu)建TDF工作流的規(guī)則   405
12.5.5  組合Reactive Extensions(Rx)和TDF   406
12.6  本章小結(jié)   407
 第Ⅲ部分  現(xiàn)代并發(fā)編程模式應(yīng)用
第13章  成功的并發(fā)編程的配方和設(shè)計模式   411
13.1  循環(huán)利用對象以減少內(nèi)存消耗   412
13.2  自定義并行Fork/Join運算符   415
13.3  并行具有依賴關(guān)系的任務(wù):設(shè)計代碼以優(yōu)化性能   418
13.4  用于協(xié)調(diào)并發(fā)I/O操作共享資源的閘門:一次寫入,多次讀取   423
13.5  線程安全的隨機(jī)數(shù)生成器   430
13.6  多態(tài)事件聚合器   432
13.7  自定義Rx調(diào)度程序來控制并行度   435
13.8  并發(fā)的反應(yīng)式可擴(kuò)展客戶端/服務(wù)器   438
13.9  可復(fù)用的自定義高性能并行filter-map運算符   448
13.10  無阻塞同步消息傳遞模型   452
13.11  使用代理編程模型協(xié)調(diào)并發(fā)作業(yè)   457
13.12  組合monadic函數(shù)   462
13.13  本章小結(jié)   465
第14章  使用并發(fā)函數(shù)式編程構(gòu)建可擴(kuò)展的移動應(yīng)用程序   467
14.1  現(xiàn)實世界服務(wù)器上的函數(shù)式編程   468
14.2  如何設(shè)計一個成功的高性能應(yīng)用程序   469
14.2.1  秘制醬:ACD   470
14.2.2  不同的異步模式:將工作排隊以稍后執(zhí)行   470
14.3  選擇正確的并發(fā)編程模型   472
14.4  實時交易:股票市場示例的高層架構(gòu)   475
14.5  股票市場應(yīng)用程序的基本要素   479
14.6  編寫股票市場交易應(yīng)用程序   479
14.7  本章小結(jié)   501
附錄A  函數(shù)式編程   503
附錄B  F#概述   517
附錄C  F#異步工作流和.NET Task之間的互操作性   535
 

本目錄推薦

掃描二維碼
Copyright ? 讀書網(wǎng) m.ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網(wǎng)安備 42010302001612號