【Go】為什麼用go; Golang Erlang 前世今生

來源:互聯網
上載者:User

標籤:

給自己一條退路,再次比較Erlang和Golang

2014-6-28

陳葉皓 [email protected]

 

雨天的周末,適合碼字的時節。。。

一年前我開始學習go語言的時候,如獲至寶,既有python的編碼效率,又帶來效能的15倍提升。尤其是在非同步編程方面,可以使用channel同步線程,不必加鎖可以充分利用cpu多核計算,真是沒有弱點。

 

後來慢慢瞭解到,這種無鎖非同步編程的思想,源自一門叫做erlang的語言,Erlang更加了不起。除了非同步編程之外,這門語言天生支援分布式,單機上開發的軟體,可以不加修改地運行在叢集上,另外還支援軟體版本的熱升級,內建的OTP架構支援進程間的監督和重啟,提供了堅如磐石的運行環境。Erlang是如此完美,我認為是最適合開發互連網應用的語言,一時間有種“終於找到真理”的喜悅。

 

不過那個時候,心裡總覺得有什麼地方不對,那就是,七牛CEO許式偉本身是Erlang高手,他卻為自己的公司選擇go語言,七牛成為一家只使用go語言進行開發的公司。

 

最近幾天隨著erlang學習的深入,慢慢找到了答案。Erlang實質是一門動態語言,它的動態類型,動態函數調用,都充分表現的動態語言的特徵。Erlang是一個運行在虛機裡面的動態語言,其實也不奇怪,只有動態語言,才容易實現軟體版本的熱升級。那動態語言有什麼缺點,就是慢,動態語言因為時刻要進行類型推導,執行速度就是要比靜態語言慢好幾倍,所以,erlang自身所做的最佳化,就是儘可能把常用的功能用c語言實現,整合到erlang的虛機內,至於程式員編寫的代碼,也只能慢慢地執行了。

 

所以erlang適用的情境是,高並發且計算不密集,例如whatsapp,使用erlang編寫,千萬使用者同時線上,高並發的典型情境,但是使用者之間發送訊息是不密集的,一個人打字能有多快,這個情境就特別適合erlang。

 

許式偉早就明白,七牛要提供的圖片雲端儲存,時刻需要大塊磁碟IO,圖片即時縮放需要大量CPU計算,選擇靜態語言go語言,可以提高效能,減少伺服器的購買。

 

“世間安得雙全法,不負如來不負卿”,高並發和密集計算其實是一對矛盾,當cpu服務於密集計算,自然無暇響應更多的請求。當然可以使用erlang搭建互連網服務,響應高並發地請求,然後把計算轉移到cpu閒置節點上,然而那些計算節點,如果是用靜態語言(比如go語言)編寫,會獲得更好的效能。

 

在設計軟體時,微觀上,要識別哪些可以並發,哪些必須串列。宏觀上,要識別哪些是IO密集,哪些是計算密集。永遠沒有標準答案,正是這個行業的魅力。

 

比較總結:

Erlang的優勢,其中的2,3,4並沒有別的語言可以匹敵

1.       高並發,非同步編程的鼻祖,寫並發代碼很簡單

2.       支援叢集

3.       健壯(OTP的進程監督機制)

4.       代碼熱升級、熱復原

 

Go語言(scala,F#類似)的優勢,

1.       高並發,支援非同步編程

2.       高效能(靜態語言的優勢)

 

http://blog.sina.com.cn/s/blog_6e1bd8350102uwgl.html

【Go】為什麼用go; Golang Erlang 前世今生

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.