出版時間:2012-8 出版社:人民郵電出版社 作者:[美] Martin Logan,[美] Eric Merritt,[瑞典] Richard Carlsson 頁數(shù):333 字數(shù):526000 譯者:連 城
Tag標簽:無
前言
本書試圖提煉出成就一名專業(yè)Erlang程序員所需的最關鍵的知識,借此我們才能讓這門高效的語言發(fā)揮出其最大的潛力。Erlang/OTP功能強大,但直到目前為止,對初學者來說,通過研讀OTP文檔來自學OTP框架仍然是件令人望而生畏的事情(這些文檔探究了很多細節(jié),卻缺乏全局觀)?!? 本書三位作者長期從事Erlang相關工作,但各自的發(fā)展軌跡卻很不一樣?!? Martin:“我是在自己第一份‘真正’的工作中接觸到Erlang的。此前我一直從事C和C++開發(fā),也有意思得很。我的第一任老板Hal Snyder甚至在20世紀90年代便對多線程深惡痛絕,后來邂逅了Erlang。我那時還只是個實習生,于是他給了我一個要用Erlang完成的項目。原因嘛,嗯,無非是我的工錢低,即便我搞砸了,公司在這樁買賣上的損失也就不過70美元。最后我并沒搞砸,我自己寫了一個1000行的監(jiān)督進程,代碼不好看,因為那時候我壓根兒不知道OTP是什么東西,手邊當然也不會有相關的書。在這個過程中,我愛上了這種‘靠譜’的開發(fā)后端系統(tǒng)的方法,也愛上了Erlang。Erlang給了我洞悉未來的機會:我所寫的復雜分布式系統(tǒng),所用的高級算法,都是我那些使喚著命令式語言的同事們所夢寐以求的,不花上兩年工夫碼上一百萬行代碼他們壓根兒實現(xiàn)不出來。讀了數(shù)千頁文檔,寫了數(shù)萬行代碼之后,我依然鐘情于它。一路走來,我遇到了許多杰出的人物,能與其中的兩位共同撰寫本書令我激動不已。2004年我在ACM會議上發(fā)言時遇到了Richard,四年后我又遇到了Eric,并和他一同創(chuàng)建了Erlware--一個仍在蓬勃發(fā)展中的項目。多年來,Erlang在我的職業(yè)生涯和個人生活中一直扮演著重要的角色,今后也仍會如此。” Eric:“我研究Erlang完全是無心插柳。我曾想寫一款大規(guī)模多人游戲。然而我明白,僅憑一人之力,即便是才華橫溢,也干不完所有圖形處理的活兒。于是我決定集中精力主攻游戲邏輯部分,覺得借助于合適的工具和語言我應該能解決這部分問題。在我的設計中,我喜歡在游戲中設立多個代理對象,每個代理對象都能隨時間自主學習并獨立而并發(fā)地行動。那時我能想到的唯一可行的辦法,就是把每個代理對象都建模為某種并發(fā)的東西,但當時我還不知道這個東西是什么。我所掌握的語言沒法讓一個開發(fā)者單槍匹馬拿下這么一款游戲。于是,我開始考察各種語言,前前后后一共花了大概五年時間,作了一些深入的研究。我很早就見識過Erlang,雖然很喜歡它的并發(fā)特性,但實在受不了它的語法和函數(shù)式特質。直到考察了很多編程語言之后,我才重新開始欣賞Erlang并用它編寫代碼。那款游戲我一直也沒能寫成,但我確信選擇Erlang沒有錯,經(jīng)過深入的研究和剖析,我發(fā)現(xiàn)這門語言在許多方面都大有用武之地。這大概是2000年或2001年的事情了。后續(xù)幾年間,我又自學了OTP。后來,在2005的時候,我在發(fā)布了Sinan的第一版,還認識了Martin Logan,并和他一起創(chuàng)辦了Erlware。2008年,我搬到了芝加哥,開始寫書并盡心打理Erlware項目?!? Richard:“我大概是在1995年前后接觸Erlang的,那時我正在烏普薩拉大學為計算機科學碩士論文選題。這引導我后來成為高性能Erlang研究組的一名博士研究生,就Erlang編譯器和運行時系統(tǒng)做了若干年的研究。我在瑞典和美國的會議上結識了Martin Logan和Eric Merritt,他們對Erlang的熱情令我印象深刻,盡管那時候Erlang還是一門鮮為人知的語言--尤其是在美國。在攻讀博士學位期間,我搞了幾個業(yè)余項目,其中語法工具庫和EDoc應用都源自我在編譯器方面的研究成果,而EUnit原本是為了檢查我的學生們的并發(fā)編程作業(yè)是否符合規(guī)范而設計的。走出學術界之后,我做了幾年和Erlang無關的工作,基本上都是在用Python、Ruby和C++寫程序。不過最近,我加盟了瑞典最成功的一家創(chuàng)業(yè)公司,再次全職投入Erlang,目前正投身于高速發(fā)展的高可用性支付系統(tǒng)領域。” 我們三人努力從共同的經(jīng)驗中提煉出盡可能多的內容,以便讓你在邁向大師級Erlang程序員的道路上少走彎路;我們也希望能借助本書,最終讓OTP框架成為每個Erlang程序員--而不是少數(shù)能將手冊翻爛的人--都能掌握的東西。
內容概要
《Erlang/OTP并發(fā)編程實戰(zhàn)》側重生產環(huán)境下的Erlang開發(fā),主要講解如何構建穩(wěn)定、版本控制良好、可維護的產品級代碼,凝聚了三位Erlang大師多年的實戰(zhàn)經(jīng)驗。
《Erlang/OTP并發(fā)編程實戰(zhàn)》主要分為三大部分:第一部分講解Erlang編程及OTP基礎;第二部分講解如何在實際開發(fā)中逐一添加OTP高級特性,從而完善應用,作者通過貫穿本書的主項目——加速Web訪問的分布式緩存應用,深入淺出地闡明了實踐中的各種技巧;第三部分討論如何將代碼與其他系統(tǒng)和用戶集成,以及如何進行性能調優(yōu)。
《Erlang/OTP并發(fā)編程實戰(zhàn)》面向Erlang程序員,以及對Erlang/OTP感興趣的開發(fā)人員。
作者簡介
Martin Logan 從1999年開始活躍于Erlang社區(qū),后來全職從事Erlang研發(fā)。目前任職于全球最大的在線旅游公司Orbitz Worldwide,為基于大規(guī)模分布式服務的基礎設施開發(fā)解決方案。Erlware聯(lián)合創(chuàng)始人,核心開發(fā)人員,Erlang/OTP軟件包管理系統(tǒng)Faxien的主要開發(fā)者。
Eric Merritt 專注并發(fā)編程和分布式系統(tǒng)。曾任職于Amazon.com,現(xiàn)為eCD Market軟件工程師。Erlware聯(lián)合創(chuàng)始人,Erlang芝加哥用戶組核心成員。Erlware團隊開源產品核心開發(fā)人員,Erlang/OTP構建系統(tǒng)Sinan的主要開發(fā)者。
Richard Carlsson 瑞典烏普薩拉大學高性能Erlang計劃(HiPE)早期成員,研究Erlang技術達17年,曾為標準庫、Erlang編譯器、運行時系統(tǒng)和Erlang語言本身都作出過不少貢獻。此外,他還是Erlang文檔系統(tǒng)EDoc和單元測試框架EUnit的創(chuàng)建者。目前加入了Kreditor,致力于高可用性支付系統(tǒng)的Erlang開發(fā)。
書籍目錄
目 錄
第一部分 Erlang起步:OTP基礎
第1章 Erlang/OTP平臺 2
1.1 基于進程的并發(fā)編程 3
1.1.1 理解并發(fā) 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 監(jiān)督與退出信號捕捉 10
1.2.3 進程的分層容錯 12
1.3 分布式Erlang 13
1.4 Erlang運行時系統(tǒng)和虛擬機 13
1.4.1 調度器 14
1.4.2 I/O與調度 15
1.4.3 進程隔離與垃圾回收器 15
1.5 函數(shù)式編程: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函數(shù) 21
2.1.4 退出shell 21
2.1.5 任務控制基礎 22
2.2 Erlang的數(shù)據(jù)類型 23
2.2.1 數(shù)值與算術運算 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 將函數(shù)視作數(shù)據(jù):fun函數(shù) 30
2.2.9 項式的比較 30
2.2.10 解讀列表 31
2.3 模塊和函數(shù) 33
2.3.1 調用其他模塊中的函數(shù)(遠程調用) 33
2.3.2 不同元數(shù)的函數(shù) 34
2.3.3 內置函數(shù)和標準庫模塊 34
2.3.4 創(chuàng)建模塊 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 函數(shù)與子句 44
2.5.1 帶副作用的函數(shù):文本打印 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函數(shù) 49
2.7.1 作為現(xiàn)有函數(shù)別名的fun函數(shù) 49
2.7.2 匿名fun函數(shù) 50
2.8 異常與try/catch 52
2.8.1 拋出(觸發(fā))異?!?2
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 重拋異?!?5
2.8.7 傳統(tǒng)的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 創(chuàng)建記錄 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 以遞歸代替循環(huán) 69
2.15.1 從迭代到遞歸 69
2.15.2 理解尾遞歸 71
2.15.3 累加器參數(shù) 72
2.15.4 談談效率 72
2.15.5 編寫遞歸函數(shù)的竅門 73
2.16 Erlang編程資源 78
2.16.1 圖書 78
2.16.2 在線資料 79
2.17 小結 79
第3章 開發(fā)基于TCP的RPC服務 80
3.1 你所創(chuàng)建的是什么 81
3.1.1 基礎知識提醒 82
3.1.2 行為模式基礎 82
3.2 實現(xiàn)RPC服務器 85
3.2.1 行為模式實現(xiàn)模塊的典型布局 85
3.2.2 模塊首部 85
3.2.3 API段 88
3.2.4 回調函數(shù)段 92
3.3 運行RPC服務器 98
3.4 淺談測試 99
3.5 小結 100
第4章 OTP應用與監(jiān)督機制 101
4.1 OTP應用 101
4.1.1 OTP應用的組織形式 102
4.1.2 為應用添加元數(shù)據(jù) 103
4.1.3 應用行為模式 104
4.1.4 應用結構小結 105
4.2 用監(jiān)督者實現(xiàn)容錯 105
4.2.1 實現(xiàn)監(jiān)督者 106
4.2.2 監(jiān)督者重啟策略 107
4.2.3 編寫子進程規(guī)范 108
4.3 啟動應用 109
4.4 生成EDoc文檔 110
4.5 小結 110
第5章 主要圖形化監(jiān)測工具的使用 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
第二部分 構建生產系統(tǒng)
第6章 打造一套緩存系統(tǒng) 126
6.1 故事背景 126
6.2 緩存的設計 127
6.3 創(chuàng)建OTP應用的基本骨架 130
6.3.1 應用目錄結構的布局 130
6.3.2 創(chuàng)建應用元數(shù)據(jù) 130
6.3.3 實現(xiàn)應用行為模式 131
6.3.4 實現(xiàn)監(jiān)督者 131
6.4 從應用骨架到五臟俱全的緩存 133
6.4.1 編寫sc_element進程 134
6.4.2 實現(xiàn)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 標準日志函數(shù) 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 節(jié)點與集群 166
8.2.1 節(jié)點的啟動 166
8.2.2 節(jié)點的互聯(lián) 167
8.2.3 Erlang節(jié)點如何定位其他節(jié)點并與之建立通信 169
8.2.4 magic cookie安全系統(tǒng) 170
8.2.5 互聯(lián)節(jié)點間的消息傳遞 171
8.2.6 使用遠程shell 173
8.3 資源探測攻略 175
8.3.1 術語 175
8.3.2 算法 176
8.3.3 實現(xiàn)資源探測應用 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實現(xiàn)分布式數(shù)據(jù)存儲 189
9.2.1 建立項目數(shù)據(jù)庫 189
9.2.2 初始化數(shù)據(jù)庫 191
9.2.3 建表 192
9.2.4 向表中錄入數(shù)據(jù) 195
9.2.5 執(zhí)行基本查詢 197
9.3 基于Mnesia的分布式緩存 199
9.3.1 用Mnesia取代ETS 199
9.3.2 讓緩存識別出其他節(jié)點 202
9.3.3 用資源探測定位其他緩存實例 205
9.3.4 動態(tài)復制Mnesia表 206
9.4 小結 209
第10章 打包、服務和部署 210
10.1 從系統(tǒng)的角度看應用 210
10.1.1 結構 211
10.1.2 元數(shù)據(jù) 211
10.1.3 系統(tǒng)如何管理運行中的應用 212
10.2 制作發(fā)布鏡像 213
10.2.1 發(fā)布鏡像 213
10.2.2 準備發(fā)布代碼 214
10.2.3 發(fā)布鏡像的元數(shù)據(jù)文件 214
10.2.4 腳本與啟動文件 216
10.2.5 系統(tǒng)配置 217
10.2.6 啟動目標系統(tǒng) 218
10.3 發(fā)布鏡像打包 219
10.3.1 創(chuàng)建發(fā)布鏡像包 219
10.3.2 發(fā)布鏡像包的內容 220
10.3.3 定制發(fā)布鏡像包 222
10.4 安裝發(fā)布鏡像 223
10.5 小結 223
第三部分 集成與完善
第11章 為緩存添加HTTP接口 226
11.1 實現(xiàn)TCP服務器 226
11.1.1 高效TCP服務器的設計模式 227
11.1.2 搭建tcp_interface應用的骨架 228
11.1.3 填充TCP服務器的實現(xiàn)邏輯 228
11.1.4 簡單文本協(xié)議 231
11.1.5 文本接口實現(xiàn) 232
11.2 打造一套全新的Web接口 234
11.2.1 HTTP簡介 234
11.2.2 實現(xiàn)一套通用的Web服務器行為模式 237
11.2.3 初識REST 248
11.2.4 用gen_web_server實現(xiàn)REST式協(xié)議 249
11.3 小結 252
第12章 用端口和NIF集成外圍代碼 253
12.1 端口和NIF 254
12.1.1 普通端口 255
12.1.2 鏈入式端口驅動 256
12.1.3 原生函數(shù)(NIF) 257
12.2 用端口來集成解析器 257
12.2.1 Erlang方面的端口 257
12.2.2 C方面的端口 260
12.2.3 編譯運行 271
12.3 開發(fā)鏈入式驅動 272
12.3.1 初識鏈入式驅動 273
12.3.2 驅動的C語言部分 274
12.3.3 編譯驅動代碼 278
12.3.4 驅動的Erlang部分 279
12.4 將解析器實現(xiàn)為NIF 280
12.4.1 NIF的Erlang部分 280
12.4.2 NIF的C代碼部分 281
12.4.3 編譯與運行代碼 287
12.5 小結 288
第13章 用Jinterface實現(xiàn)Erlang和Java間的通信 289
13.1 利用Jinterface在Erlang中集成Java 290
13.1.1 OtpNode類 290
13.1.2 OtpMbox類 291
13.1.3 Erlang數(shù)據(jù)結構的Java映射 291
13.1.4 示例:Java中的消息處理 292
13.1.5 在Erlang中與Java節(jié)點通信 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 運行集成系統(tǒng) 308
13.6 小結 310
第14章 優(yōu)化與性能 311
14.1 如何進行性能調優(yōu) 312
14.1.1 設定性能目標 312
14.1.2 設定基線 313
14.1.3 系統(tǒng)性能分析 313
14.1.4 確定需要解決的問題 313
14.1.5 測定優(yōu)化成果 313
14.2 Erlang代碼性能分析 314
14.2.1 用cprof計算調用次數(shù) 314
14.2.2 用fprof測定執(zhí)行時間 316
14.3 Erlang編程語言的缺陷 320
14.3.1 基本數(shù)據(jù)類型的性能特點 321
14.3.2 內置函數(shù)和運算符的性能 324
14.3.3 函數(shù) 325
14.3.4 進程 327
14.4 小結 329
附錄A 安裝Erlang 330
附錄B 列表與引用透明性 332
章節(jié)摘錄
版權頁: 插圖: 1.4.1 調度器 經(jīng)過多年的演進,ERTS的進程調度器提供了其他平臺無法比擬的靈活性。它最初的設計目標是在單CPU上并發(fā)運行輕量級Erlang進程,而不用關心底層用的是什么操作系統(tǒng)。ERTS運行的時候通常就是單個操作系統(tǒng)進程(在操作系統(tǒng)的進程列表中一般名為beam或werl)。這個進程中,就跑著管理所有Erlang進程的調度器。 隨著線程在大多數(shù)操作系統(tǒng)中的普及,ERTS也有所變化,開始將I/O系統(tǒng)這類東西從運行Erlang進程的線程中拿出來,放到獨立的線程中去,但完成主體工作的線程仍然只有一個。如果你用的是多核系統(tǒng),就必須在同一臺機器上運行多個ERTS實例。不過從2006年5月起,Erlang/OTP第11版中增加了對稱多處理器(SMP)支持。這是一項重大突破,令Erlang運行時系統(tǒng)可以在內部使用不止一個進程調度器,每個占用一個獨立的操作系統(tǒng)線程。 這意味著現(xiàn)在Erlang進程可以以n:m的方式映射到操作系統(tǒng)線程。每個調度器處理一個進程池??刹⑿羞\行的Erlang進程最多能有m個(每個調度器線程執(zhí)行一個),但同一池內的進程仍像之前所有進程共用一個調度器那樣分時運行。在此基礎之上,進程可以在進程池之間遷移以便維 持可用調度器上的負載均衡。在最新的Erlang/OTP發(fā)布版中,甚至可以根據(jù)機器上CPU的拓撲情 況將進程綁定到特定的調度器上,從而更好地利用硬件的緩存架構。這意味著,大多數(shù)時候,作為一名Erlang程序員你不用擔心手頭有多少CPU或有多少個核:你只要中規(guī)中矩地寫程序,并盡量將程序切分為尺寸適中的并行任務就好,負載均衡之類的事情就讓Erlang運行時系統(tǒng)去操心吧。不管是單核還是128核——都一樣,只會更快。 Erlang新手常犯的一個錯誤就是過分依賴時序,這往往導致那些在他們的筆記本或工作站上運行良好的程序一遷移到多核服務器上就出錯,因為在多核服務器上時序的不確定性要大得多。要發(fā)現(xiàn)這類問題,只能借助測試。好在現(xiàn)在的筆記本基本上都至少是雙核的了,這類錯誤也可以被盡早發(fā)現(xiàn)。 Erlang的調度器還涉及運行時系統(tǒng)的另一個重要特性:I/O子系統(tǒng)。這正是我們的下一個主題。 1.4.2 I/O與調度 很多并發(fā)語言都有的一個毛病就是它們沒怎么拿I/O當回事兒。單個進程進行I/O時,它們幾乎都存在整個系統(tǒng)或大半系統(tǒng)阻塞的問題。這真是既惱人又沒有必要,尤其是Erlang早在二十年前就已經(jīng)解決了這個問題。在前一節(jié),我們曾討論過Erlang的進程調度器。除了處理進程調度,調度器還替系統(tǒng)優(yōu)雅地處理了I/O問題。在系統(tǒng)的最底層,Erlang以事件驅動的方式處理所有I/O,當數(shù)據(jù)進出系統(tǒng)時,程序可以以非阻塞方式完成數(shù)據(jù)處理。這降低了連接建立和斷開的頻次,還避免了OS層面上的加鎖開銷和上下文切換。 這是一種高效的I/O處理方法??上В绦騿T往往難以分析和理解這種技術,這也是為什么只有在明確要求高可靠性和低延遲的系統(tǒng)中才能見到這種技術。早在2001年,Dan Kegel就在他的論文The C10K Problem中描述過這個問題,雖然現(xiàn)在已經(jīng)略顯過時,但這篇文章仍然很值得一讀。它針對這個問題及可能的解決方案給出了良好的綜述。這些方案實現(xiàn)起來全都既復雜又痛苦,這正是Erlang運行時系統(tǒng)替你包辦這些問題的原因。Erlang在進程調度器中整合了基于事件的I/O系統(tǒng)。事實上,你一點兒都不用操心就能享受一切便利。這讓用Erlang/OTP構建高可靠性系統(tǒng)變得輕松了很多。 我們要講解的最后一個ERTs特性就是內存管理。它對進程所起的作用超出你的想象。 1.4.3 進程隔離與垃圾回收器 如你所想,Erlang跟Java等大部分現(xiàn)代語言一樣,會自動管理內存。這兒沒有顯式的釋放操作。相反,垃圾回收器會定期搜尋和回收不再使用的內存。垃圾回收(GC)算法是一片廣袤而復雜的研究領域,我們無法在這兒給出詳盡的闡述;不過針對那些對此有一定了解又心懷好奇的讀者,可以告訴你Erlang當前使用的是一個簡單明了的分代復制式垃圾回收器。
編輯推薦
《Erlang/OTP并發(fā)編程實戰(zhàn)》講述了如果將Erlang語言看成才華橫溢的鋼琴家,那么OTP平臺就是一架能讓鋼琴家把才能發(fā)揮得淋漓盡致的鋼琴?!禘rlang/OTP并發(fā)編程實戰(zhàn)》除了全面介紹Erlang語言和OTP平臺的基礎知識外,還通過一系列實用案例引領你深入了解OTP的高級特性,一步步構建一個大型生產系統(tǒng)。并加以優(yōu)化和完善。三位作者在Erlang領域擁有極其豐富的實戰(zhàn)經(jīng)驗,細致入微地剖析了OTP開發(fā)與部署的全過程。要想真刀真槍地上戰(zhàn)場。《Erlang/OTP并發(fā)編程實戰(zhàn)》才是你明智的選擇!
名人推薦
“驚艷!不管是對于初學者還是Erlang高手,本書絕對都是不容錯過的好書?!?——Amazon.com書評 “多核處理器和并發(fā)編程是將來的重頭戲。ErIang在下一代編程語言中可謂獨領風騷!” ——DZone書評 “Erlang開發(fā)者必備兩本書,一本是ErIang之父Joe Arrrlstrong的《Erlang程序設計》,另一本就是本書——務實、高效又不失幽默風趣的好書??!” ——slashdot.org書評
圖書封面
圖書標簽Tags
無
評論、評分、閱讀與下載
Erlang/OTP并發(fā)編程實戰(zhàn) PDF格式下載