簡約語言:golang; CSP式的並行存取模型
來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。用python開發也有幾年了,很喜歡它的簡潔。最近在看golang,感覺和python很像,文法簡潔,標準類型相識,標準庫也是一樣的豐富。引用一段文字(http://blog.csdn.net/myan/article/details/2028545):
所謂”魔幻語言“,主要代表作品有C++、Perl、Javascript和Ruby。這些語言擁有豐富的特性,聰明的技 巧和意想不到的奇效,永遠有發掘不完的奇技淫巧,總能找到讓人匪夷所思的”yet another way"。反過來,“簡約語言”崇尚清晰直接,夠用就行,要求從代碼容易理解,寧可笨一點、累一點、多寫一點代碼,反對出人意料的技巧,反對故弄玄虛。 C、PHP、Python和Lua這一派語言的代表作。
看來golang也是“簡約語言”。
之前一直使用python的微線程(協程,纖程)開發模式,對gevent和stackless都有一定的瞭解。由於python有GIL,實際開發中很少用到thread,這時對stackless中的channel使用有些不理解。為什麼多個微線程中需要用channel來通訊呢?微線程本身並非實際並發執行,完全可以用共用記憶體的方式來通訊。所以在之前使用python開發項目時,為了利用多核,項目的架構一般是:微線程+多進程模式。微線程使用共用記憶體的開發方式,的確比較簡單方便。
最近在學習golang時,看到很多golang資料中提到CSP(
“通過通訊來共用記憶體,而非通過共用記憶體來通訊”的原則)。最初不甚理解,看了這篇資料(http://concur.rspace.googlecode.com/hg/talk/concur.html)後頓悟。文章中用簡單明了的圖示範了CSP和普通的共用記憶體方式實現的並行存取模型,golang中的goroutine是能在多個真實線程下執行的,從而達到了真正利用多核的目的。雖然開始對CSP有些感覺,不過如果要在實際項目中使用還會有很多細節需要考慮。