目 錄
第一部分 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 基本數據類型的性能特點 321
14.3.2 內置函數和運算符的性能 324
14.3.3 函數 325
14.3.4 進程 327
14.4 小結 329
附錄A 安裝Erlang 330
附錄B 列錶與引用透明性 332
· · · · · · (
收起)