續上篇 Day8 - 讀 Concurrency is not Parallelism - Rob Pike (三)
接下來,Rob Pike 講了一些 goroutine、channel、select 的基本用法,這邊我就直接略過了。
接著,Rob Pike 舉了個例子:一個簡單的 load balancer
定義一個 work,有 x, y, z 成員,下個投影片,我們將會拿他做運算
這個 woker function 將會從 in
channel 拿取數值,運算後再由 out
channel 將結果送出,這邊的 sleep 只是為了模擬 block
再來我們將它運作起來吧,我們能看到一個 goroutine 派發工作,NumWokers
個 goroutine 工作,一個 goroutine 接收工作的結果。
注意,Rob Pike 又強調了一次,這些 goroutine 是 concurrently 運行的,有可能是 parallel (但也不一定是)
此段心得:雖然 Rob Pike 沒明講,但這不類似 Day8 講個 gopher 燒書例子嗎,一個 gopher 堆書,一個 gopher 運送東西,一個 gopher 拿到書之後燒書,只是稍回做個替換而已,就變一個簡單的 load balancer 了
此 load balancer 是 implicit parallel,這裡指的應該是他是可以被平行化的,但是也不必要。
scalable 指的應該是,你可以自由地調整 worker 數目以及 process 數目 (平行化的執行個體數目),並且還可以正常的運作。 而我們只使用了一些 concurrent 工具轉且了幾行程式就能達到這個效果。
注意到了嗎?這裡完全沒使用 lock 同步,也沒 mutex,那些傳統的 concurrency 模型,這裡都沒使用上。這也是這頁投影片所講的意思。
最後,Rob Pike 說,這例子太簡單了,來點真實的。
今天就到這啦,終於寫到這了,明天就是這一個演講的最後一篇。