Scala並發編程 第2版
內容描述
本書是一本關於並發編程技術的教程,書中詳細介紹了並發編程中的主要概念和基本數據結構,包括傳統並發模型、基於Future 和Promise的異步編程、數據並行容器、基於響應式擴展的並發編程、軟件事務性內存、角色模型、並發編程實踐和反應器編程模型等。本書基於Scala語言編寫,實例豐富,可操作性很強。
本書面向的用戶群體以Scala用戶為主,因為書中所有的示例都是基於Scala代碼的。但其他語言用戶也可以從中獲益良多,因為書中介紹的並發編程概念是普遍適用的,並不局限於特定編程語言,只不過Scala比較適用於並發編程而已。
目錄大綱
第1章概述1
1.1並發編程2
1.1.1傳統並發計算概述2
1.1.2現代並發編程範式3
1.2 Scala的優勢4
1.3準備工作5
1.3.1執行一個Scala程序5
1.3.2初識Scala 6
1.4小結10
1.5練習11
第2章JVM和JMM上的並發性13
2.1進程和線程14
2.1.1線程的創建和啟動16
2.1.2原子執行20
2.1.3重排序24
2.2監控器和同步26
2.2.1死鎖28
2.2.2保護塊30
2.2.3線程中斷和平滑關閉34
2.3易失變量35
2.4 JMM 37
2.5小結40
2.6練習41
第3章並發編程的傳統構造模塊45
3.1 Executor和ExecutionContext對象46
3.2原子性原語49
3.2.1原子性變量49
3.2.2無鎖編程52
3.2.3鎖的實現54
3.2.4 ABA問題56
3.3懶值58
3.4並發容器62
3.4.1並發隊列64
3.4.2並發集合和映射66
3.4.3並發遍歷71
3.5定制的並發數據結構73
3.5.1實現一個無鎖的並發池74
3.5.2進程的創建和處理78
3.6小結79
3.7練習80
第4章基於Future和Promise的異步編程82
4.1 Future 83
4.1.1啟動Future計算84
4.1.2 Future回調86
4.1.3 Future和異常88
4.1.4使用Try類型89
4.1.5致命異常90
4.1.6 Future上的函數式組合91
4.2 Promise 98
4.2.1包裝基於回調的API 100
4.2.2擴展Future API 102
4.2.3異步計算的取消103
4.3 Future和阻塞106
4.3.1等待Future完成106
4.3 .2在異步計算內部阻塞107
4.4 Scala的Async庫108
4.5其他Future框架110
4.6小結112
4.7練習112
第5章數據並行容器116
5.1 Scala容器概述117
5.2使用並行容器117
5.2.1並行容器的類繼承譜系121
5.2.2配置並行層次122
5.2.3測量JVM上的性能123
5.3並行容器的缺點125
5.3.1不可並行容器125
5.3.2不可並行操作126
5.3.3並行操作中的副作用128
5.3.4非確定性的並行操作129
5.3.5可交換和可結合的操作131
5.4將並行容器和並發容器結合起來132
5.5實現定制的並行容器134
5.5.1分裂器135
5.5.2組合器138
5.6小結141
5.7練習142
第6章基於響應式擴展的並發編程143
6.1創建Observable對象144
6.1.1 Observable對象和異常146
6.1.2 Observable規約147
6. 1.3定制Observable對象149
6.1.4由Future對象創建Observable對象150
6.1.5訂閱151
6.2 Observable對象的組合154
6.2.1嵌套Observable對象155
6.2.2 Observable對象的錯誤處理160
6.3 Rx調度器163
6.4 Subject和自頂向下響應式編程169
6.5小結173
6.6練習174
第7章軟件事務性內存176
7.1原子性變量的問題177
7.2使用STM 180
7.2.1事務性引用182
7.2.2使用atomic語句183
7.3事務的組合185
7 .3.1事務間的交互和副作用185
7.3.2單操作事務189
7.3.3嵌套的事務190
7.3.4事務和異常193
7.4事務的重試197
7.5事務性容器202
7.5.1事務局部變量202
7.5.2事務性數組203
7.5.3事務性映射205
7.6小結206
7.7練習207
第8章角色模型210
8.1使用角色模型211
8.1.1創建角色系統和角色實例213
8.1.2未處理消息的管理216
8.1.3角色行為和狀態217
8.1.4 Akka角色的層次關係221
8.1.5角色的查找224
8.1.6角色的生命週期226
8.2角色之間的通信230
8.2.1 ask模式231
8.2 .2轉發模式234
8.2.3角色終止235
8.3角色的監管237
8.4遠程角色242
8.5小結246
8.6練習246
第9章並發編程實踐248
9.1選擇並發性編程的正確工具248
9.2將所有工具組合起來——編寫一個遠程文件瀏覽器252
9.2.1文件系統建模253
9.2.2服務器接口256
9.2.3客戶端API 258
9. 2.4客戶端程序的用戶界面261
9.2.5實現客戶端邏輯265
9.2.6改進遠程文件瀏覽器270
9.3調試並發性程序271
9.3.1死鎖和沒有進度272
9.3.2程序錯誤輸出的調試276
9.3.3性能調優280
9.4小結286
9.5練習286
第10章反應器編程模型289
10.1對反應器的需求290
10.2開始使用Reactor 291
10.3 Hello World程序291
10.4事件流293
10.4.1事件流的生命週期294
10.4.2事件流的函數式組合295
10.5反應器297
10 .5.1反應器的定義和配置299
10.5.2使用通道300
10.6調度器302
10.7反應器生命週期304
10.8反應器系統服務305
10.8.1日誌服務306
10 .8.2時鐘服務306
10.8.3 Channels服務307
10.8.4定制服務309
10.9協議310
10.9.1定制一個服務器—客戶端協議311
10.9.2標準服務器—客戶端協議313
10.9.3路由協議316
10.9.4兩路協議318
10.10小結321
10.11練習321
作者介紹
Aleksandar Prokopec 是一位軟件開發者,同時也是並發和分佈式編程技術研究者。
他擁有克羅地亞薩格勒布大學電子工程和計算學院的計算機專業碩士學位和瑞士洛桑聯邦理工大學(EPFL)的計算機科學專業博士學位。
作為EPFL 博士助教和Scala 語言開發團隊成員,他積極為Scala 編程語言做貢獻,研究並發編程抽象、並行數據編程支持和Scala並發數據結構。他編寫了Scala Parallel Collections 框架,這是一個高級的Scala 並行數據編程庫。
他還參加了多個Scala 並發庫開發小組,開發了Future、Promise 和ScalaSTM 等抽象。