《Haskell並行與並發編程》是2014年11月人民郵電出版社出版的圖書,作者是[英]Simon Marlow。
基本介紹
- 中文名:Haskell並行與並發編程
- 作者:[英]Simon Marlow
- 出版社:人民郵電出版社
- 出版時間:2014年11月
- 頁數:259 頁
- 定價:59 元
- 開本:16 開
- 裝幀:平裝
- ISBN:9787115367181
內容簡介,圖書目錄,
內容簡介
《Haskell並行與並發編程》深入淺出地介紹如何使用Haskell語言及相關的庫和框架編寫並行和並發程式。《Haskell並行與並發編程》用兩個部分分別講解並行Haskell編程和並發Haskell編程。根據編程模型的不同,並行部分介紹了3種並行編程方式:基於惰性求值的並行(Eval Monad及求值策略)、基於數據流的並行(Par Monad)以及面向大規模數組算法的並行(Repa數據並行編程和Acellerate GPU編程)。並發部分則按抽象層次由低到高分別涉及執行緒和MVar、重疊I/O、執行緒的取消和逾時、軟體事務記憶體、高 級並發抽象、並發網路服務程式、使用執行緒並行編程和分散式編程等,還介紹調試、性能調優以及外部函式接口。書中包含大量可運行的代碼示例,並附有詳細的注釋,讀者通過親身運行、修改和調試代碼,可極大地加深對書中內容的理解。
《Haskell並行與並發編程》適合有一定Haskell語言基礎的程式設計師或者對並行或並發編程感興趣的相關人員閱讀。
圖書目錄
第 1章 緒論 1
1.1 術語:並行性和並發性 1
1.2 工具和資源 3
1.3 示例代碼 3
第 一部分 並行Haskell
第 2章 並行基礎:Eval Monad 9
2.1 惰性求值和弱首範式 9
2.2 Eval monad、rpar和rseq 15
2.3 示例:並行化數獨解算器 18
2.4 Deepseq 27
第3章 求值策略 29
3.1 參數化策略 30
3.2 列表並行求值策略 32
3.3 示例:K均值問題 33
3.3.1 並行化K均值問題求解 37
3.3.2 性能和分析 39
3.3.3 spark活動可視化 42
3.3.4 粒度 43
3.4 spark垃圾回收與投機並行 44
3.5 使用parBuffer並行化惰性流 47
3.6 分塊策略 50
3.7 恆等性 51
第4章 數據流並行:Par Monad 52
4.1 示例:圖中的最短路徑 56
4.2 流水線並行 59
4.2.1 生產者限速 63
4.2.2 流水線並行的局限性 63
4.3 示例:會議時間表 64
4.4 示例:並行類型推斷器 71
4.5 使用不同的調度器 75
4.6 Par monad和策略的對比 76
第5章 Repa數據並行編程 77
5.1 數組、形狀和索引 78
5.2 數組運算 80
5.3 示例:計算最短路徑 82
5.4 摺疊和形狀多態 86
5.5 示例:圖像旋轉 88
5.6 小結 92
第6章 Acellerate GPU編程 94
6.1 概述 95
6.2 數組和索引 95
6.3 運行簡單Accelerate計算 97
6.4 標量數組 99
6.5 數組索引 99
6.6 在Acc中創建數組 99
6.7 數組配對 101
6.8 常數 102
6.9 示例:最短路徑 102
6.9.1 在GPU上運行 105
6.9.2 調試CUDA後端 106
6.10 示例:Mandelbrot集生成器 106
第 二部分 並發Haskell
第7章 並發基礎:執行緒和MVar 115
7.1 簡單的示例:提醒器 116
7.2 通信:MVar 118
7.3 MVar用作簡單通道:日誌服務 120
7.4 MVar用作共享狀態的容器 122
7.5 MVar用作構件單元:無界通道 125
7.6 公正性 129
第8章 重疊I/O 131
8.1 Haskell中的異常 134
8.2 Async的錯誤處理 138
8.3 合併 140
第9章 執行緒的取消和逾時 143
9.1 異步異常 144
9.2 異步異常的禁止 146
9.3 bracket操作 149
9.4 通道的異步異常安全 149
9.5 逾時 151
9.6 異步異常的捕獲 153
9.7 mask和forkIO 155
9.8 關於異步異常的討論 156
第 10章 軟體事務記憶體 158
10.1 運行示例:視窗管理 158
10.2 阻塞 162
10.3 阻塞直到發生變化 164
10.4 STM的合併 165
10.5 Async的重實現 166
10.6 通道的STM實現 168
10.6.1 更多可能的操作 169
10.6.2 阻塞操作的複合 170
10.6.3 異步異常安全 170
10.7 通道的另一種實現 171
10.8 有界通道 173
10.9 STM的適用性 175
10.10 性能 176
10.11 小結 178
第 11章 高 級並發抽象 179
11.1 執行緒泄漏的避免 179
11.2 對稱並發組合子 181
11.3 添加函子實例 184
11.4 小結:Async API 185
第 12章 並發網路服務程式 186
12.1 簡易伺服器 186
12.2 包含狀態的簡易伺服器 189
12.2.1 設計一:單一全局鎖 190
12.2.2 設計二:每條服務執行緒一個通道 190
12.2.3 設計三:使用廣播通道 191
12.2.4 設計四:使用STM 192
12.2.5 實現 193
12.3 聊天伺服器 195
12.3.1 架構 196
12.3.2 客戶數據 197
12.3.3 伺服器數據 198
12.3.4 伺服器 199
12.3.5 設定新客戶 199
12.3.6 運行客戶處理 201
12.3.7 小結 203
第 13章 使用執行緒並行編程 204
13.1 如何通過並發實現並行 204
13.2 示例:檔案搜尋 205
13.2.1 串列版本 205
13.2.2 並行版本 207
13.2.3 性能和伸縮性 208
13.2.4 使用信號量限制執行緒數量 210
13.2.5 ParIO monad 215
第 14章 分散式編程 218
14.1 distributed-process及相關軟體包 219
14.2 分散式是並發還是並行? 220
14.3 第 一個示例:ping 220
14.3.1 進程和Process Monad 221
14.3.2 定義訊息類型 221
14.3.3 Ping服務進程 222
14.3.4 主進程 224
14.3.5 main函式 225
14.3.6 Ping示例小結 225
14.4 多節點ping 226
14.4.1 單機運行多節點 227
14.4.2 多機運行 227
14.5 有類型通道 229
14.6 故障處理 233
14.7 分散式聊天伺服器 236
14.7.1 數據類型 237
14.7.2 傳送訊息 239
14.7.3 廣播 240
14.7.4 分散式處理 240
14.7.5 測試伺服器 243
14.7.6 故障以及增刪節點 243
14.8 練習:分散式鍵值存儲 245
第 15章 調試、性能調整以及外部函式接口 247
15.1 並發程式調試 247
15.1.1 查看執行緒狀態 247
15.1.2 記錄事件日誌和ThreadScope 248
15.1.3 死鎖檢測 250
15.2 並發(和並行)程式的調優 252
15.2.1 創建執行緒和Mvar操作 252
15.2.2 共享並發數據結構 255
15.2.3 RTS選項的調整 255
15.3 並發和外部函式接口 257
15.3.1 執行緒和外部對外調用 257
15.3.2 異步異常和外部調用 259
15.3.3 執行緒和外部對內調用 259