給自己一條退路,再次比較
erlang
和golang
2014-6-28
雨天的週末,適合碼字的時節。。。
一年前我開始學習
go語言的時候,如獲至寶,既有
python
的編碼效率,又帶來效能的
15倍提公升。尤其是在非同步程式設計方面,可以使用
channel
同步執行緒,不必加鎖可以充分利用
cpu多核計算,真是沒有弱點。
後來慢慢了解到,這種無鎖非同步程式設計的思想,源自一門叫做
erlang
的語言,
erlang
更加了不起。除了非同步程式設計之外,這門語言天生支援分布式,單機上開發的軟體,可以不加修改地執行在集群上,另外還支援軟體版本的熱公升級,自帶的
otp框架支援程序間的監督和重啟,提供了堅如磐石的執行環境。
erlang
是如此完美,我認為是最適合開發網際網路應用的語言,一時間有種「終於找到真理」的喜悅。
不過那個時候,心裡總覺得有什麼地方不對,那就是,七牛
ceo許式偉本身是
erlang
高手,他卻為自己的公司選擇
go語言,七牛成為一家只使用
go語言進行開發的公司。
最近幾天隨著
erlang
學習的深入,慢慢找到了答案。
erlang
實質是一門動態語言,它的動態型別,動態函式呼叫,都充分表現的動態語言的特徵。
erlang
是乙個執行在虛機裡面的動態語言,其實也不奇怪,只有動態語言,才容易實現軟體版本的熱公升級。那動態語言有什麼缺點,就是慢,動態語言因為時刻要進行型別推導,執行速度就是要比靜態語言慢好幾倍,所以,
erlang
自身所做的優化,就是盡可能把常用的功能用
c語言實現,整合到
erlang
的虛機內,至於程式設計師編寫的**,也只能慢慢地執行了。 所以
erlang
適用的場景是,高併發且計算不密集,例如
,使用erlang
erlang。
許式偉早就明白,七牛要提供的雲儲存,時刻需要大塊磁碟
io,實時縮放需要大量
cpu計算,選擇靜態語言
go語言,可以提高效能,減少伺服器的購買。
「世間安得雙全法
,不負如來不負卿」,高併發和密集計算其實是一對矛盾,當
cpu服務於密集計算,自然無暇響應更多的請求。當然可以使用
erlang
搭建網際網路服務,響應高併發地請求,然後把計算轉移到
cpu空閒的節點上,然而那些計算節點,如果是用靜態語言(比如
go語言)編寫,會獲得更好的效能。
在設計軟體時,微觀上,要識別哪些可以併發,哪些必須序列。巨集觀上,要識別哪些是
io密集,哪些是計算密集。永遠沒有標準答案,正是這個行業的魅力。
比較總結:
erlang
的優勢,其中的
2,3,4
並沒有別的語言可以匹敵 1.
高併發,非同步程式設計的鼻祖,寫併發**很簡單 2.
支援集群 3.
健壯(otp的程序監督機制) 4.
**熱公升級、熱回滾 go
語言(scala,f#
類似)的優勢, 1.
高併發,支援非同步程式設計 2.
高效能(靜態語言的優勢)
給自己一條退路,再次比較Erlang和Golang
一年前我開始學習go語言的時候,如獲至寶,既有python的編碼效率,又帶來效能的15倍提公升。尤其是在非同步程式設計方面,可以使用channel同步執行緒,不必加鎖可以充分利用cpu多核計算,真是沒有弱點。後來慢慢了解到,這種無鎖非同步程式設計的思想,源自一門叫做erlang的語言,erlang更...
放下,給愛一條生路
因愛而生的恨是這個世界上最長的繩索,它可以 你一輩子,放下你的恨,給愛一條生路,既是給自己松幫,也是給別人鬆綁,那樣,你才會好好愛自己,也會好好愛別人。題記 空牽念 男人很愛女人,以為這一生他們會白頭偕老,牽手一生,他以為他的愛女人能懂。他愛她美麗的容顏,聰明的頭腦。他愛她的賢良淑德,愛她的溫婉可人...
一條吞掉自己的大蛇
作者 梁文道 2008 10 29 21 01 47 南方周末 本文 芬蘭的義務教育是乙個奇蹟。從2000年開始,芬蘭總是在 國際學生評量計畫 裡頭名列前茅 更令人吃驚 艷羨甚至恐懼的,是他們的學生還在不斷進步,評分一年比一年高。且不說其他專案,光看閱讀 據統計,41 的芬蘭中學生最常幹的休閒活動是...