複製鏈接
請複製以下鏈接發送給好友

Erlang語言

鎖定
Erlang編程語言最初目的是進行大型電信交換設備的軟件開發,是一種適用於大規模並行處理環境的高可靠性編程語言。隨着多核處理器技術的日漸普及,以及互聯網雲計算等技術的發展,該語言的應用範圍也有逐漸擴大之勢。 [1] 
中文名
Erlang語言
外文名
Erlang
所屬學科
計算機科學
定    義
大規模並行處理環境的語言
開發公司
愛立信公司
開發時間
1986年

Erlang語言目標

Erlang是一種面向併發運行環境的通用編程語言。該語言由愛立信公司在1986年開始開發。設計之初,Erlang的開發者着眼於找到一種適用於開發大型電信交換設備的編程語言,即達到以下目標:
大規模併發處理與分佈式計算能力
同時處理大量的併發業務(例如同時處理上百萬個電話呼叫);必須及時並在特定短的時間內完成業務處理;適用於大規模的分佈式處理系統,並不斷與硬件進行交互。
用於開發高可靠性、高質量的電信產品
連續數年的不間斷運行;對軟件系統所進行的維護操作(如配置修改、升級等)不會中比軟件本身的運行;在硬件故障和軟件錯誤發生時具有容錯能力,嚴格地限制故障和錯誤所波及的範圍。
適用於複雜的項目
用於超大規模的軟件開發項目(例如數百萬行代碼);所實現的軟件能完成複雜的功能,各特性之間存在大量交互。
該語言隨後在愛立信內部的若干電信設備開發項目中得到應用,並逐步完善;1988年底Erlang成為開源語言(開源對愛立信的直接好處是:Erlang語言本身的維護與發展、相關的教育培訓等投入不再由愛立信獨自承擔;在開源社區的看護下可以使Erlang更好地發展,同時愛立信也可以繼續享受該語言的成果),但並不廣為人知;近年來隨着基於互聯網的電子商務、即時通訊、雲計算、大型網絡遊戲等應用的發展,以及多核處理器的逐漸興起,Erlang在大規模併發處理能力和高可靠性方面的優勢被越來越多的人所重視,其應用範圍有逐漸擴大之勢。 [1] 

Erlang語言開發運行環境

Erlang語言可基於各主流操作系統開發與運行,包括Windows、UnixLinuxMac OSVxWorks等等。
Erlang程序可以編譯為虛擬機指令,由虛擬機解釋執行(這一點類似於Java)。 Erlang語言所用的虛擬機被稱為BEAM。
Erlang也可以直接編譯為機器指令,直接在處理器運行(這一點類似於C/C++等)。
虛擬機方式和機器指令運行方式在應用效果上的主要區別是:虛擬機方式運行效率較低,但編譯後的程序指令佔用內存空間較小;機器指令方式則反之。具體如何選擇根據軟件項目的實際需要而定。
作為一種開源的編程語言,相關的資源可在其社區網站(http: //www. erlang. org/)直接h載。可獲得的下載資源包括一個被稱為OTP (Open Telecom Platform)的一整套支撐平台,該平台包括大量的文檔、庫函數與組件、開發與調測工具,以及一個被稱為Mnesia的分佈式實時關係數據庫(該數據庫由Erlang開發;其數據訪問語言是Erlang,而非通常關係數據庫所用的SQL)。 [1] 

Erlang語言特徵機制

分佈式運行環境
一個用Erlang開發的系統,其程序運行在一組被稱為Erlang Node的物理節點上。可以用一個私有局域網內的若干台主機構成這些物理節點,也可以用通過使用TCP/IP套接字將更大範圍中的物理節點連接起來組成一個系統。
基於編程語言本身的進程管理
Erlang語言本身支持進程概念。一個Erlang系統中通常運行大量的進程(在電信交換系統中同時存在數百萬進程並不讓人驚訝),每個進程運行在一個Erlang Node上並可以跨Node創建其它進程。通常建議每個進程只處理輕量級的任務;如果有較複雜的大型任務需要處理,則軟件設計人員應設法將大型任務儘可能分解成較小的任務,這樣做的目的是儘可能充分發揮大規模分佈式系統中所有物理節點的處理能力。
基於異步消息的進程間通信
用傳統語言編程通常都會用到複雜的共享內存管理機制,這也是用傳統語言編程的一個容易出錯的方;Erlang的各進程之間則完全不共享內存,進程之間的通信只通過異步消息來完成。
每個Erlang進程都有一個專用的郵箱用於接收消息。當接收到一個期望收到的異步消息則立刻處理之,否則將其緩衝並等到期望收到該消息時再處理。
每個進程的所有行為都是由所接收到的異步消息或時間定時器觸發,運行過程中也不存在因等待共享內存使用權而產生的阻塞。
不共享內存也就避免了隨之而來的出錯機會;但所有進程間通信(特別是一個物理節點內的進程間通信)都需要通過異步消息進行,無疑也增加了通信所需的開銷(主要是消息內容的拷貝),這是Erlang為提高可靠性而付出的代價。
基於進程機制的軟件出錯處理
Erlang提供了定義“相連”進程的機制,即在進程之間可定義“相連”關係,當一個進程因出錯而死亡時,向所有與其有“相連”關係的進程報告自身的死亡信息;收到死亡信息的進程如果是普通進程(區別於系統進程),則也立刻死亡(一旦出錯,所有相連進程全部死亡);系統進程則可進行出錯信息記錄等操作,然後繼續運行。
基於雙機備份的容錯機制
一個考慮了容錯設計的Erlang系統至少要包含2個節點,它們之間互相監視;當一個節點出錯巖機(無論是軟件原因還是硬件故障),其工作立即由另一個節點接替。
這種容錯機制背後的理念是:一旦一個節點失效,則不再信任其能進行任何後續的故障處理;為保證容錯,失效節點的職責必須立刻由其它節點接替。
參考資料
  • 1.    陳寅秋. Erlang——一種支持大規模併發處理的高可靠性編程語言[J]. 電腦與電信, 2009(11):36-38.