《Erlang/OTP並發編程實戰》
基本資料
原書名:Erlang and OTP in Action
作者: (美)洛根(Logan,M.) 梅裡特(Merritt,E.) (瑞典) 卡爾森(Carlsson,R.) [作譯者介紹]
譯者: 連城
出版社:人民郵電出版社
ISBN:9787115285591
上架時間:2012-7-3
出版日期:2012 年7月
開本:16開
頁碼:1
版次:1-1
所屬分類: 電腦 更多關於 》》》《Erlang/OTP並發編程實戰》
內容簡介
書籍
電腦書籍
《erlang/otp並發編程實戰》側重生產環境下的erlang 開發,主要講解如何構建穩定、版本控制良好、可維護的產品級代碼,凝聚了三位erlang 大師多年的實戰經驗。
《erlang/otp並發編程實戰》主要分為三大部分:第一部分講解erlang 編程及otp 基礎;第二部分講解如何在實際開發中逐一添加otp 進階特性,從而完善應用,作者通過貫穿本書的主專案——加速web 訪問的分布式緩衝應用,深入淺出地闡明了實踐中的各種技巧;第三部分討論如何將代碼與其他系統和使用者整合,以及如何進行效能調優。
《erlang/otp並發編程實戰》面向erlang 程式員,以及對erlang/otp 感興趣的開發人員。
目錄
《erlang/otp並發編程實戰》
第一部分 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 用gen_web_server實現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 基礎資料型別 (Elementary Data Type)的效能特點 321
14.3.2 內建函數和運算子的效能 324
14.3.3 函數 325
14.3.4 進程 327
14.4 小結 329
附錄a 安裝erlang 330
附錄b 列表與引用透明性 332
本圖書資訊來源:中國互動出版網