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

2021-08-14 17:27:33 字數 1155 閱讀 8062

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

後來慢慢了解到,這種無鎖非同步程式設計的思想,源自一門叫做erlang的語言,erlang更加了不起。除了非同步程式設計之外,這門語言天生支援分布式,單機上開發的軟體,可以不加修改地執行在集群上,另外還支援軟體版本的熱公升級,自帶的otp框架支援程序間的監督和重啟,提供了堅如磐石的執行環境。erlang是如此完美,我認為是最適合開發網際網路應用的語言,一時間有種「終於找到真理」的喜悅。

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

最近幾天隨著erlang學習的深入,慢慢找到了答案。erlang實質是一門動態語言,它的動態型別,動態函式呼叫,都充分表現的動態語言的特徵。erlang是乙個執行在虛機裡面的動態語言,其實也不奇怪,只有動態語言,才容易實現軟體版本的熱公升級。那動態語言有什麼缺點,就是慢,動態語言因為時刻要進行型別推導,執行速度就是要比靜態語言慢好幾倍,所以,erlang自身所做的優化,就是盡可能把常用的功能用c語言實現,整合到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

給自己一條退路,再次比較 erlang 和golang 2014 6 28 陳葉皓 chenyehao gmail.com 雨天的週末,適合碼字的時節。一年前我開始學習 go語言的時候,如獲至寶,既有 python 的編碼效率,又帶來效能的 15倍提公升。尤其是在非同步程式設計方面,可以使用 cha...

放下,給愛一條生路

因愛而生的恨是這個世界上最長的繩索,它可以 你一輩子,放下你的恨,給愛一條生路,既是給自己松幫,也是給別人鬆綁,那樣,你才會好好愛自己,也會好好愛別人。題記 空牽念 男人很愛女人,以為這一生他們會白頭偕老,牽手一生,他以為他的愛女人能懂。他愛她美麗的容顏,聰明的頭腦。他愛她的賢良淑德,愛她的溫婉可人...

一條吞掉自己的大蛇

作者 梁文道 2008 10 29 21 01 47 南方周末 本文 芬蘭的義務教育是乙個奇蹟。從2000年開始,芬蘭總是在 國際學生評量計畫 裡頭名列前茅 更令人吃驚 艷羨甚至恐懼的,是他們的學生還在不斷進步,評分一年比一年高。且不說其他專案,光看閱讀 據統計,41 的芬蘭中學生最常幹的休閒活動是...