天天看點

[轉] Erlang,Learning

1. Erlang 是什麼

一種“小衆”語言(排名50之外)

一種函數式語言 (變量隻能指派一次)

一種動态類型語言(變量類型在運作時決定,代碼需要編譯後才能執行,與Python,Ruby等不一樣)

一種強類型語言

一種面向并發(Concurrency Oriented)的語言

《一場茶杯裡的風暴》(刊于《程式員》06年9、10期),《 輕松實作可伸縮性,容錯性,和負載平衡的大規模多人線上系統》是兩篇極好的介紹性文章。

2.開始學習

先下載下傳安裝包

到 http://www.erlang.org/ 下載下傳最新的 Erlang/OTP 版本

或者到 http://cean.process-one.net/download/ 下載下傳一個更易于使用的發行版本,僅有3M大小

網上的資源

http://www.erlang.org/ 是官方網站,建議訂閱其郵件清單

訂閱 http://www.planeterlang.org/ 的RSS

http://www.trapexit.org/ 裡面有不錯的文章和教程

http://www.process-one.net/en/ 裡面有不少Erlang項目

http://yaws.hyber.org/ 一個并發效率大大超越Apache的Web Server

http://ejabberd.jabber.ru/ 一個Erlang的Jabber伺服器實作

http://kl.agile.com/ 裡面有Potian和T1的一些經常讨論整理。

http://groups.google.com/group/erlang-china 裡面也有一些相關讨論

http://computebank.spaces.live.com/?_c11_blogpart_blogpart=blogview_c=blogpartpartqs=cat%3d%25e5%2588%2586%25e5%25b8%2583%25e5%25bc%258f%25e5%25b9%25b6%25e8%25a1%258c%25e8%25ae%25a1%25e7%25ae%2597 這哥們翻譯了Erlang的部分文檔,太好了

你也可以關注JavaEye的綜合版

編輯器

Erlide,一個Eclipse的Erlang插件,問題是不夠穩定,要随時做好崩潰的準備

Vim,加入vim-erlang 和 taglist 插件後就是一個不錯的IDE

Emacs,推薦,會用Emacs的不妨一試

NetBeans,dcaoyuan同學正在開發一個Erlang插件,有興趣的可以保持關注

Notepad,你太有才了,其實用筆記本寫c的也一大堆...

3.文法,架構

Erlang的文法不是很難,但是寫慣了OO的程式,初看還是蠻怪異的。看看文檔,動手練練,入門還是很Easy的。當對基本文法,程序通訊,分布通訊都掌握之後,就是時候向OTP(Open Telecom Platform)這個平台進軍的時候了,如果你想開發99.9999999%的高可用性系統。

4.算法,架構

Erlang這門FP語言提供了非常高的分布式程式開發效率,不再需要辛辛苦苦使用ACE,NIO構造一個支援高并發的通訊底層,不再需要小心翼翼使用lock,semaphore等開發一個多線程的程式。然而,更為核心的問題出現了,怎樣将一個大規模計算任務通過一個良好的算法并行起來,怎樣實作程序間的通訊架構,使得系統能夠實作Load Balance和Fail Over,實作高可用性,健壯性,高性能的目标。

此外,需要留神IO這個常見的瓶頸,Joe Armstrong曾經寫了一個pmap(parallel map)的實作,在一台32核的SUN niagara伺服器上并行運作一個需要與IO互動的任務。下面是性能提升的資料

引用 #CPUs Speedup

1 0,953

2 1,855

3 2,679

4 3,44

5 4,012

6 4,624

7 5,093

8 5,46

9 5,73

10 6,11

11 6,108

12 6,47

13 6,58

14 6,8

15 6,67

16 7

17 6,99

18 7,29

19 6,97

20 6,97

21 6,74

22 6,86

23 7,07

24 6,85

可見性能提升到了7%後便徘徊不前,追究其原因,是IO那裡成為了瓶頸。無論是C,Java,Ruby還是Erlang,都要直視IO帶來的問題。

來源:http://www.javaeye.com/topic/65549

上一篇: Erlang概述

繼續閱讀