[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這段話有如大學時上課唸到的教科書所述,加大cache並非萬能,越肥的體積占在CPU裡面,帶來的副作用跟幫助效用成反比。
to increase performance as cache have physical limits:
the bigger the cache, the slower it gets.
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
留言
張貼留言