2014年9月15日 星期一

[golang] 多執行緒測試

與一些玩過Golang的伙伴討論,

他們都認為Golang有非常簡單的Multi-Threads可以處理

所以我就來試試
就以Golang提供的教學按例

只要用go就可以開一條新的thread

但我用cpu檢視圖發現,

不管開幾條都僅用一個CPU,

看來是一腦多用模式,

並不是多腦多用,

有點像是python的threading而不是multiprocessing

適合I/O讀與寫等等的協同作業,

而不是和大量計算處理 (fork)。


另外我發現一點執行時最怪的地方,

我至今無法理解 (例如下面程式),

1. for i:=0; i < 4; i++ {
2.    go afunc()
3. }
4. afunc()

如果沒有第4行,則第2行的結果就不會被執行,

這個執行原則我到現在還是沒有完全理解,

不過我也沒有多的時間去探究,等改日有機會深探再說。


如果要用到多核處理,

目前相關的支援和程式碼都在github上,

還不是官方發表的 (或是我沒找到?),

但不管怎樣處理,若要完全使用到所有的CPU

最快最方便的處理方法就是透過OS下指令來執行process了



2017/3/31後記: 去年golang出新版本1.5以上已直接支援multi-processing無需在另外設定

沒有留言:

張貼留言