[Go] 閱讀心得 Why should you learn Go?


Why should you learn Go?
原文網址

這邊文章介紹為什麼要使用Go語言,閱讀後,個人摘錄一些部分並記錄自己的心得。

PART 1

作者首先討論摩爾定律這件事情,並且認為這個定律是失敗的,卡在物理上的限制。其實我認為這個定律還沒完全失敗,如果時間拉長用5年、10年來看的話,哪天突破一個想像的限制,硬體所能提供的運算速度又會飄上去了。

We cannot add more and more cache to the processor
to increase performance as cache have physical limits:
the bigger the cache, the slower it gets.
這段話有如大學時上課唸到的教科書所述,加大cache並非萬能,越肥的體積占在CPU裡面,帶來的副作用跟幫助效用成反比。

Adding more core to the processor has its cost too.
這也沒錯,無限加core有極限,不是頂天的解法。推論的結果是不能依賴硬體,要靠軟體的協助。

然後作者說非常upset,現代的軟體來講,有效運用硬體資源的程度遠遠不夠,換句話落後很多硬體方面的成長。

這句話我在學生時代就有聽過,但不能夠深刻體會,直到我稍微了解了gorutine是什麼鬼東西。GOD ! 真的是軟體不夠力,還可以靠軟體再進化一個程度。

碰巧下個段落作者馬上就提到gorutine了,gorutine就是golang拿來突破物理限制的銀彈。



PART 2

作者說到Java、Python 是90年代的背景而生的,那時候只有單執行緒,雖然後來都可以執行多個執行緒,但併發、執行緒鎖、競爭、死結,新的執行緒生出需要很久,需要產生1MB以上的heap,更困難的是執行緒之間的溝通,這些不得不面對的問題拖累我們熟悉的這些程式語言。

這部分的背景之前我比較不清楚,但就我所知的Java,可不能小看,Java在管理這些東西運行的非常穩定,他有一套獨特的處理機制。讓我想到有如Apple當初推出iphone5時RAM只有1GB的大小,但人家速度就是吊打16GB RAM的HTC,HTC 掰~

但單論『併發』的問題,JAVA也許真的很難與擁有gorutine的Golang抗衡。



PART 3

起一個新的goruntine,所需要的時間遠比其他語言起一個新的thread時間還要短暫以外,新的goruntine只需要2KB的空間大小(我在其他地方念到的是4KB啦)

作者還介紹golang其他優點

Goroutines have growable segmented stacks. That means they will use more memory only when needed.
這個我不清楚,無從比較。

Goroutines have a faster startup time than threads.
這當然,一個thread上面可以有上千上萬的gorutine。

Goroutines come with built-in primitives to communicate safely between themselves (channels).
這點可能很重要,channel的概念是來自作業系統,果然晚出生就是有優勢。

Goroutines allow you to avoid having to resort to mutex locking when sharing data structures.
這部分lock的機制我不清楚,所以也無從比較。

Also, goroutines and OS threads do not have 1:1 mapping. A single goroutine can run on multiple threads.
一個goruntine可以在多個thread上跑?我想這是指當原本在A thread跑的goruntine,當A thread 卡住了,或B thread有多餘空閒,可以將原本Athread跑的gorutine搬到B thread 去跑,並不是可以同時在A和B thread同時間運行。

Goroutines are multiplexed into small number of OS threads.



PART 4

中間講了一段golang需要編譯後運行,編譯後的binary code 執行起來會快很多,這是肯定的,需要編譯的語言真的直譯式語言的優點多很多。

然後講了很多go的好話,golange脫離了OOP有很多好處之類的,這傢伙一定是反OOP信仰的XD



PART 5

最後有段我覺得蠻認同:

Developer needs to understand the hardware and make their program optimize accordingly.
因為是資工出來的,修過作業系統,在閱讀goruntine的相關說明,覺得稍微多了背景知識,可能比起他人更能夠上手,並且更深入知道goruntine厲害在哪裡。

有時候真的覺得,有先知道某些相關背景知識,能夠輔助我們學習新東西,也推薦大家多看看其他的學科知識,也許挑有興趣的就好,或多或少幫助觸類旁通吧。

Created Date : 2018/07/31

Last Updated Date : 2018/08/02

留言

這個網誌中的熱門文章

[Go] 型態轉換 type convert

[Go] Golang用法 package import 前面的底線

[Go] 指標 pointer with golang