Scala並發編程

Scala並發編程

免費的性能午餐已經結束——Intel、AMD 和Sparc、PowerPC 等主要的處理器生產廠商,從前使用的提高CPU 性能的傳統方法已經走到盡頭,單核處理器的主頻多年來一直踏步不前,當今主流的CPU 製造技術是超執行緒和多核架構。面對計算機性能的挑戰和硬體架構的改變,迷惘的軟體開發者們應何去何從?

目錄

前言 ............................................................................................ XVII

1 簡介 ........................................................................................................... 1

並發程式設計 .......................................................................................................... 1

傳統並發編程技術概述 ............................................................................. 2

現代並發範式 .......................................................................................................... 3

Scala 的優點 ....................................................................... 4

預備知識 ....................................................................................... 5

執行Scala 程式 ......................................................................... 5

Scala 基礎知識 ................................................................................................ 6

小結 ...................................................................................................... 11

練習 ........................................................................................ 11

2 JVM 和Java 記憶體模型中的並發處理方式 ................................................ 13

進程和執行緒 ...................................................................... 14

創建和啟動執行緒 ....................................................16

原子執行方式 .......................................................21

調整次序 ..................................................................................................25

監控器和同步 ............................................................................................... 27

死鎖 .....................................................................................................29

保衛鎖 ..........................................................................................................32

中斷執行緒和正常關閉 ...............................................................................................36

Volatile 變數 .................................................................................................. 37

Java 記憶體模型.............................................................................................. 39

不可變對象和final 欄位 .......................................................41

小結 ............................................................. 43

練習 ....................................................................................... 43

3 構建並發程式的傳統材料 ............................................. 47

Executor 和ExecutionContext 對象 ................... 48

原子型基元 ...................................................... 52

原子變數 ............................................................................52

無鎖編程 ..........................................................55

以明確方式實現鎖 ...................................................................57

ABA 問題 .....................................................................59

惰性值 .............................................................................. 61

並發集合 ..................................................................... 66

並發佇列 ...............................................................................68

並發集和映射 .....................................................71

並發遍歷 .............................................................77

創建和處理進程 ...................................................... 79

小結 ................................................................. 81

練習 ................................................................... 81

4 使用Future 和Promise 對象編寫異步程式 .............................................. 85

Future 類 ................................................................................. 86

執行Future 計算....................................................................88

Future 對象的回調函式 ..................................................89

Future 計算和異常 ...............................................92

使用Try 類型 .......................................93

致命異常 ............................................95

Future 對象中的函式組合 ............................................................95

Promise 類 .................................................. 103

轉換基於回調函式的API ........................................................... 106

擴展Future API .................................................. 108

取消異步計算操作 ..................................................................................... 109

Future 對象和阻塞操作 ................................................................... 112

等待Future 對象..................................................................................... 112

在異步計算內部執行阻塞操作 ................................................................................... 113

Scala Async 庫 ...................................................................... 114

可選的Future 框架 .......................................................................................... 117

小結 ........................................................................................................... 118

練習 ....................................................................................................................... 119

5 數據並行集合 ......................................................................................... 121

Scala 集合概述 ................................................................................................ 122

並行集合的用法 ......................................................................................... 123

並行集合類的層次結構 ....................................................................................... 126

配置並行等級 ...................................................................................................... 128

在JVM 中度量性能 ............................................................................. 129

使用並行集合的注意事項 ................................................................................. 131

非可並行化集合 .................................................................... 131

非可並行化操作 .............................................................................................. 132

並行操作的副作用 .................................................................................................... 134

不確定的並行操作 .................................. 135

可交換和可結合操作符 .............................................................. 137

組合使用並行集合和並發集合 .................................................................... 139

弱一致性疊代器 ........................................................ 140

實現自定義的並行集合 ............................................................................... 141

分離器 ................................................................................................ 142

組合器 ..................................................................................................... 145

可選的數據並行框架 ................................................................. 148

ScalaBlitz 框架中的集合層次結構 .............................................................. 149

小結 ....................................................................................................... 150

練習 ............................................................................................. 151

6 使用Reactive Extensions 編寫並發程式 ............................................... 153

創建Observable 對象 ............................................................... 154

Observable 對象和異常 ................................................................ 157

Observable 協定 ................................................................................ 158

實現自定義Observable 對象 ...................................................................................... 160

通過Future 對象創建Observable 對象 ............................................................ 161

Subscription 對象 ............................................................................................ 162

組合Observable 對象 ...................................................................................... 165

嵌套的Observable 對象 ....................................................................................... 166

處理完善Observable 對象失敗的情況 .................................................................. 171

Rx 調度器 ............................................................................... 174

使用自定義調度器編寫UI 應用程式 .................................................................. 176

Subject 特徵和自頂向下的回響式編程 .................................................. 181

小結 ............................................................................................ 186

練習 ..................................................................................... 186

7 基於軟體的事務記憶體 .............................................................................. 189

原子變數帶來的麻煩 ...................................................................... 190

使用基於軟體的事務記憶體 .............................................. 194

事務引用 ......................................................... 196

使用atomic 語句 ................................................................ 197

組合事務 .............................................................. 198

事務與副作用 ................................................................. 199

單操作事務 ................................................................. 203

嵌套事務 ........................................................... 205

事務和異常 ...................................................... 208

重新嘗試執行事務 ........................................ 212

通過逾時設定重新嘗試執行事務 ......................................... 216

事務集合 ..................................................................................... 217

事務局部變數 ................................................................. 218

事務數組 ......................................................... 219

事務映射 .............................................................................. 221

小結 ............................................................................................. 222

練習 ............................................................................. 223

8 Actor ...................................................................................................... 227

使用Actor 模型 ............................................................................... 228

創建Actor 系統和Actor 實例 ..................................................................... 230

管理無法正常處理的訊息 .................................................................................. 233

Actor 實例的行為和狀態 ........................................................................................ 234

Akka 框架中的Actor 層次結構.................................................................................. 239

識別Actor 對象 ............................................................................................... 242

Actor 對象的生命周期 ................................................................................... 245

Actor 對象之間的通信 ...................................................... 249

請求模式 ........................................................ 251

轉發模式 ..................................................................... 254

停止Actor 對象 ......................................................................... 255

Actor 監督 .......................................................................... 257

遠程Actor 對象 ............................................................. 263

小結 .............................................................................................. 266

練習 ................................................................................................... 267

9 實用並發技術 ......................................................................................... 269

工欲善其事,必先利其器 ....................................................... 269

組合使用多種框架——編寫遠程檔案管理器 ............................................ 273

創建檔案系統模型 ........................................................ 274

伺服器接口 ......................................................................... 278

客戶端導航API.................................................................................. 280

客戶端的用戶界面 ............................................................................. 284

實現客戶端程式的邏輯 .................................................................................. 288

改進遠程檔案管理器 ........................................................................................ 293

調試並發程式 ................................................................................................................... 294

死鎖和暫停處理過程 ............................................................... 295

調試運行結果不正確的程式 ................................................................ 299

性能調試 ............................................................................... 304

小結 .............................................................................................................................. 310

練習 .................................................................................................................................. 311

相關詞條

相關搜尋

熱門詞條

聯絡我們