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

2021-07-26 13:51:41 字數 1704 閱讀 2851

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

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

適用的場景是,高併發且計算不密集,例如

,使用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 的芬蘭中學生最常幹的休閒活動是...