iT邦幫忙

2021 iThome 鐵人賽

DAY 9
0
自我挑戰組

golang 後端菜雞工程師學習雜記系列 第 9

Day9 - 讀 Concurrency is not Parallelism - Rob Pike (四)

  • 分享至 

  • xImage
  •  

續上篇 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 說,這例子太簡單了,來點真實的。

今天就到這啦,終於寫到這了,明天就是這一個演講的最後一篇。


上一篇
Day8 - 讀 Concurrency is not Parallelism - Rob Pike (三)
下一篇
Day10 - 讀 Concurrency is not Parallelism - Rob Pike (五)
系列文
golang 後端菜雞工程師學習雜記18
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言