《》《》《》《Erlang/OTP並發編程實戰》是2012年8月人民郵電出版社出版的圖書,作者是(美)Martin Logan、(美)Eric Merritt、(瑞典)Richard Carlsson。
基本介紹
- 書名:Erlang/OTP並發編程實戰
- 作者:(美)Martin Logan、(美)Eric Merritt、(瑞典)Richard Carlsson。
- 譯者:連城,
- ISBN:9787115285591
- 頁數:333
- 定價:79.00
- 出版社:人民郵電出版社
- 出版時間:2012-08-01
- 裝幀:平裝
- 開本:16開
內容簡介,作者簡介,圖書目錄,
內容簡介
《Erlang/OTP並發編程實戰》側重生產環境下的Erlang開發,主要講解如何構建穩定、版本控制良好、可維護的產品級代碼,凝聚了三位Erlang大師多年的實戰經驗。《Erlang/OTP並發編程實戰》主要分為三大部分:第一部分講解Erlang編程及OTP基礎;第二部分講解如何在實際開發中逐一添加OTP高級特性,從而完善套用,作者通過貫穿本書的主項目——加速Web訪問的分散式快取套用,深入淺出地闡明了實踐中的各種技巧;第三部分討論如何將代碼與其他系統和用戶集成,以及如何進行性能調優。《Erlang/OTP並發編程實戰》面向Erlang程式設計師,以及對Erlang/OTP感興趣的開發人員。
作者簡介
Martin Logan, 從1999年開始活躍於Erlang社區,後來全職從事Erlang研發。目前任職於全球最大的線上旅遊公司Orbitz Worldwide,為基於大規模分散式服務的基礎設施開發解決方案。Erlware聯合創始人,核心開發人員,Erlang/OTP軟體包管理系統Faxien的主要開發者。
Eric Merritt,專注並發編程和分散式系統。曾任職於Amazon。com,現為eCD Market軟體工程師。Erlware聯合創始人,Erlang芝加哥用戶組核心成員。Erlware團隊開源產品核心開發人員,Erlang/OTP構建系統Sinan的主要開發者。
Richard Carlsson,瑞典烏普薩拉大學高性能Erlang計畫(HiPE)早期成員,研究Erlang技術達17年,曾為標準庫、Erlang編譯器、運行時系統和Erlang語言本身都作出過不少貢獻。此外,他還是Erlang文檔系統EDoc和單元測試框架EUnit的創建者。目前加入了Kreditor,致力於高可用性支付系統的Erlang開發。
連城,百度資深軟體工程師,《Erlang並發編程(第一部分)》社區翻譯項目組織者及主要譯者。對分散式存儲、分散式訊息系統、程式語言設計實現抱有濃厚興趣。
圖書目錄
第一部分 Erlang起步:OTP基礎
第1章 Erlang/OTP平台 2
1.1 基於進程的並發編程 3
1.1.1 理解並發 3
1.1.2 Erlang的進程模型 4
1.1.3 4種進程通信範式 5
1.1.4 用Erlang進程編程 8
1.2 Erlang的容錯架構 10
1.2.1 進程連結如何工作 10
1.2.2 監督與退出信號捕捉 10
1.2.3 進程的分層容錯 12
1.3 分散式Erlang 13
1.4 Erlang運行時系統和虛擬機 13
1.4.1 調度器 14
1.4.2 I/O與調度 15
1.4.3 進程隔離與垃圾回收器 15
1.5 函式式編程:Erlang的處世之道 16
1.6 小結 16
第2章 Erlang語言精要 18
2.1 Erlang shell 19
2.1.1 啟動shell 19
2.1.2 輸入表達式 20
2.1.3 shell函式 21
2.1.4 退出shell 21
2.1.5 任務控制基礎 22
2.2 Erlang的數據類型 23
2.2.1 數值與算術運算 24
2.2.2 二進制串與位串 25
2.2.3 原子 26
2.2.4 元組 27
2.2.5 列表 27
2.2.6 字元串 28
2.2.7 pid、連線埠和引用 29
2.2.8 將函式視作數據:fun函式 30
2.2.9 項式的比較 30
2.2.10 解讀列表 31
2.3 模組和函式 33
2.3.1 調用其他模組中的函式(遠程調用) 33
2.3.2 不同元數的函式 34
2.3.3 內置函式和標準庫模組 34
2.3.4 創建模組 35
2.3.5 模組的編譯和載入 36
2.3.6 獨立編譯器erlc 37
2.3.7 已編譯模組與在shell中求值 37
2.4 變數與模式匹配 38
2.4.1 變數的語法 39
2.4.2 單次賦值 39
2.4.3 模式匹配:加強版的賦值 41
2.4.4 解讀模式 42
2.5 函式與子句 44
2.5.1 帶副作用的函式:文本列印 44
2.5.2 用模式匹配在多個子句中進行選擇 45
2.5.3 保護式 46
2.5.4 模式、子句和變數作用域 47
2.6 Case和if表達式 48
2.6.1 Erlang的布爾型if-then-else分支選擇 48
2.6.2 If表達式 49
2.7 fun函式 49
2.7.1 作為現有函式別名的fun函式 49
2.7.2 匿名fun函式 50
2.8 異常與try/catch 52
2.8.1 拋出(觸發)異常 52
2.8.2 運用try...catch 53
2.8.3 try...of...catch 53
2.8.4 after 54
2.8.5 獲取棧軌跡 54
2.8.6 重拋異常 55
2.8.7 傳統的catch 55
2.9 列錶速構 56
2.9.1 列錶速構記法 56
2.9.2 映射、過濾和模式匹配 56
2.10 比特位語法與位串速構 57
2.10.1 構造位串 57
2.10.2 比特位語法中的模式匹配 58
2.10.3 位串速構 59
2.11 記錄語法 59
2.11.1 記錄聲明 60
2.11.2 創建記錄 60
2.11.3 記錄的欄位以及模式匹配 60
2.11.4 更新記錄欄位 60
2.11.5 記錄聲明應該放在哪兒 61
2.12 預處理與檔案包含 61
2.12.1 宏的定義和使用 61
2.12.2 檔案包含 62
2.12.3 條件編譯 63
2.13 進程 64
2.13.1 操縱進程 64
2.13.2 訊息接收與選擇性接收 65
2.13.3 註冊進程 66
2.13.4 訊息投遞與信號 67
2.13.5 進程字典 67
2.14 ETS表 68
2.14.1 為何ETS表被設計成這樣 68
2.14.2 ETS表的基本用法 68
2.15 以遞歸代替循環 69
2.15.1 從疊代到遞歸 69
2.15.2 理解尾遞歸 71
2.15.3 累加器參數 72
2.15.4 談談效率 72
2.15.5 編寫遞歸函式的竅門 73
2.16 Erlang編程資源 78
2.16.1 圖書 78
2.16.2 線上資料 79
2.17 小結 79
第3章 開發基於TCP的RPC服務 80
3.1 你所創建的是什麼 81
3.1.1 基礎知識提醒 82
3.1.2 行為模式基礎 82
3.2 實現RPC伺服器 85
3.2.1 行為模式實現模組的典型布局 85
3.2.2 模組首部 85
3.2.3 API段 88
3.2.4 回調函式段 92
3.3 運行RPC伺服器 98
3.4 淺談測試 99
3.5 小結 100
第4章 OTP套用與監督機制 101
4.1 OTP套用 101
4.1.1 OTP套用的組織形式 102
4.1.2 為套用添加元數據 103
4.1.3 套用行為模式 104
4.1.4 套用結構小結 105
4.2 用監督者實現容錯 105
4.2.1 實現監督者 106
4.2.2 監督者重啟策略 107
4.2.3 編寫子進程規範 108
4.3 啟動套用 109
4.4 生成EDoc文檔 110
4.5 小結 110
第5章 主要圖形化監測工具的使用 112
5.1 Appmon 112
5.1.1 Appmon GUI 112
5.1.2 WebTool版Appmon 115
5.2 Pman 116
5.3 調試器 118
5.4 表查看器TV 121
5.5 工具列 123
5.6 小結 123
第二部分 構建生產系統
第6章 打造一套快取系統 126
6.1 故事背景 126
6.2 快取的設計 127
6.3 創建OTP套用的基本骨架 130
6.3.1 套用目錄結構的布局 130
6.3.2 創建套用元數據 130
6.3.3 實現套用行為模式 131
6.3.4 實現監督者 131
6.4 從套用骨架到五臟俱全的快取 133
6.4.1 編寫sc_element進程 134
6.4.2 實現sc_store模組 138
6.4.3 打造套用層API模組 142
6.5 小結 144
第7章 Erlang/OTP中的日誌與事件處理 145
7.1 Erlang/OTP中的日誌 146
7.1.1 日誌概述 146
7.1.2 Erlang/OTP內置的日誌設施 147
7.1.3 標準日誌函式 147
7.1.4 SASL與崩潰報告 149
7.2 用gen_event編寫自定義事件處理器 153
7.2.1 gen_event行為模式簡介 153
7.2.2 事件處理器示例 154
7.2.3 處理錯誤事件 155
7.3 為Simple Cache添加自定義事件流 157
7.3.1 事件流API 157
7.3.2 將處理器整合進Simple Cache 159
7.3.3 訂閱自定義事件流 161
7.4 小結 162
第8章 分散式Erlang/OTP簡介 163
8.1 Erlang分散式基礎 163
8.1.1 複製式進程間通信 164
8.1.2 位置透明性 165
8.2 節點與集群 166
8.2.1 節點的啟動 166
8.2.2 節點的互聯 167
8.2.3 Erlang節點如何定位其他節點並與之建立通信 169
8.2.4 magic cookie安全系統 170
8.2.5 互聯節點間的訊息傳遞 171
8.2.6 使用遠程shell 173
8.3 資源探測攻略 175
8.3.1 術語 175
8.3.2 算法 176
8.3.3 實現資源探測套用 177
8.4 小結 182
第9章 用Mnesia為cache增加分散式支持 183
9.1 分散式快取 184
9.1.1 選取通信策略 184
9.1.2 同步快取和異步快取 186
9.1.3 分散式表 188
9.2 用Mnesia實現分散式數據存儲 189
9.2.1 建立項目資料庫 189
9.2.2 初始化資料庫 191
9.2.3 建表 192
9.2.4 向表中錄入數據 195
9.2.5 執行基本查詢 197
9.3 基於Mnesia的分散式快取 199
9.3.1 用Mnesia取代ETS 199
9.3.2 讓快取識別出其他節點 202
9.3.3 用資源探測定位其他快取實例 205
9.3.4 動態複製Mnesia表 206
9.4 小結 209
第10章 打包、服務和部署 210
10.1 從系統的角度看套用 210
10.1.1 結構 211
10.1.2 元數據 211
10.1.3 系統如何管理運行中的套用 212
10.2 製作發布鏡像 213
10.2.1 發布鏡像 213
10.2.2 準備發布代碼 214
10.2.3 發布鏡像的元數據檔案 214
10.2.4 腳本與啟動檔案 216
10.2.5 系統配置 217
10.2.6 啟動目標系統 218
10.3 發布鏡像打包 219
10.3.1 創建發布鏡像包 219
10.3.2 發布鏡像包的內容 220
10.3.3 定製發布鏡像包 222
10.4 安裝發布鏡像 223
10.5 小結 223
第三部分 集成與完善
第11章 為快取添加HTTP接口 226
11.1 實現TCP伺服器 226
11.1.1 高效TCP伺服器的設計模式 227
11.1.2 搭建tcp_interface套用的骨架 228
11.1.3 填充TCP伺服器的實現邏輯 228
11.1.4 簡單文本協定 231
11.1.5 文本接口實現 232
11.2 打造一套全新的Web接口 234
11.2.1 HTTP簡介 234
11.2.2 實現一套通用的Web伺服器行為模式 237
11.2.3 初識REST 248
11.2.4 用genwebserver實現REST式協定 249
11.3 小結 252
第12章 用連線埠和NIF集成外圍代碼 253
12.1 連線埠和NIF 254
12.1.1 普通連線埠 255
12.1.2 鏈入式連線埠驅動 256
12.1.3 原生函式(NIF) 257
12.2 用連線埠來集成解析器 257
12.2.1 Erlang方面的連線埠 257
12.2.2 C方面的連線埠 260
12.2.3 編譯運行 271
12.3 開發鏈入式驅動 272
12.3.1 初識鏈入式驅動 273
12.3.2 驅動的C語言部分 274
12.3.3 編譯驅動代碼 278
12.3.4 驅動的Erlang部分 279
12.4 將解析器實現為NIF 280
12.4.1 NIF的Erlang部分 280
12.4.2 NIF的C代碼部分 281
12.4.3 編譯與運行代碼 287
12.5 小結 288
第13章 用Jinterface實現Erlang和Java間的通信 289
13.1 利用Jinterface在Erlang中集成Java 290
13.1.1 OtpNode類 290
13.1.2 OtpMbox類 291
13.1.3 Erlang數據結構的Java映射 291
13.1.4 示例:Java中的訊息處理 292
13.1.5 在Erlang中與Java節點通信 294
13.2 安裝和配置HBase 296
13.2.1 下載和安裝 296
13.2.2 配置HBase 296
13.3 為Simple Cache和HBase牽線搭橋 297
13.3.1 Erlang方面:sc_hbase.erl 298
13.3.2 HBaseConnector類 299
13.3.3 Java中的訊息處理 301
13.3.4 HBaseTask類 304
13.4 在Simple Cache中整合HBase 306
13.4.1 查詢 306
13.4.2 插入 307
13.4.3 刪除 307
13.5 運行集成系統 308
13.6 小結 310
第14章 最佳化與性能 311
14.1 如何進行性能調優 312
14.1.1 設定性能目標 312
14.1.2 設定基線 313
14.1.3 系統性能分析 313
14.1.4 確定需要解決的問題 313
14.1.5 測定最佳化成果 313
14.2 Erlang代碼性能分析 314
14.2.1 用cprof計算調用次數 314
14.2.2 用fprof測定執行時間 316
14.3 Erlang程式語言的缺陷 320
14.3.1 基本數據類型的性能特點 321
14.3.2 內置函式和運算符的性能 324
14.3.3 函式 325
14.3.4 進程 327
14.4 小結 329
附錄A 安裝Erlang 330
附錄B 列表與引用透明性 332