Go
,Goroutine
,Channel
Goroutine用於平行處理。也就是非同步執行。
執行時如果是單線程(Single Thread)的,那麼執行時只會用到一個 CPU,如果你的電腦有兩個以上的 CPU,那可以想辦法讓他們分工合作。
分工合作需要溝通,Channel用途在於可以讓不同的Goroutine去溝通。
搭配make()使用。
分辨讀寫非常容易,請看 <- 符號放在哪邊,chan<- 指向自己就是寫,<-chan 離開自己就是讀,相當好分辨,如果 func 內讀寫都需要使用,則不需要使用任何箭頭符號,但是我會建議把讀寫的邏輯都拆開不同的 func 處理,對於閱讀上非常有幫助。
有多少CPU就全部教叫出來做事,可以使用 runtime.NumCPU()
取得 CPU 的數量,再把 slice 切割成 N 等份給不同的 goroutine 去加總,最後再統合到 total,這樣不管跑這段程式的電腦有幾個 CPU 都可以均勻分配。
https://larrylu.blog/golang-goroutine-parallel-processing-
https://blog.wu-boy.com/2020/01/when-to-use-go-channel-and-goroutine/