昨日有點累,想說打個盹一下,結果醒來就隔天了,鐵人賽直接中斷。
續上篇,Day9 - 讀 Concurrency is not Parallelism - Rob Pike (四)
在上篇 Rob Pike 舉了一個簡單的 load balancer,在演講的尾聲,他提出了一個更真實的案例。
看下圖,大概分成三個部分
定義 Requester
模擬 requester 發出 request
可以看到 work 這個參數用來發出 request,result 用來等待運算的結果
定義 Worker
Worker 工作囉,就做三件事
來設計 load balacer 吧
load balancer 需要計算優先權,使用到了 Heap 資料結構,並使用 worker 的 pending 計算優先權
Load balancer 要做的事情概念很簡單。 回想一下一開始的設計圖:
load balancer 派發工作的實作:
load balancer 接收到 woker 做完工作後的實作:
這個例子學到了:
這邊 Rob Pike 又講了一個小小的例子我就略過了,直接到結論:結論相當的簡單而且微言大義,留給自己去體會囉。
以往都是從 CPU 的觀點去解讀 concurrency 和 Parallelism,但 Rob Pike 從另一個觀點切入 ,直接給出了 Programming as the composition of independently executing processes
的觀點,使用 gopher 燒書的例子帶你了解 concurrency 設計。最後直接帶你一步一步設計一個 load balancer,將一個複雜的問題切割成簡單的子問題,並且使用 go 的 concurrnecy 完成這個漂亮的設計。這場演講,這個觀點和結論,只能佩服 Rob Pike 這個大師級人物。