續上篇,Day6 - 讀 Concurrency is not Parallelism - Rob Pike (一)
在影片的中段,Rob Pike 使用了 gopher 燒書的例子,談談什麼是 concurrent design。
一開始給出了一個 gopher 燒書,但一個 gohper 會跑很久,想辦法來加快吧
一個 gopher 可能跑得太久,那就來兩個吧
可以發現只有一個書堆,一個焚化爐,gopher 可能會在書堆時或在焚化爐時會塞車,而且也需要兩隻 gopher 互相溝通傳送訊息,所以書堆和焚化爐是個瓶頸。
簡單,那就連書堆跟焚化爐都各加一個啊,兩個人各燒各的,就解決上面的瓶頸了
咦,這不就是 Parallel 了嗎?對沒錯。但是我們先不要用 parallel 的角度去想這件事情,如果用 concurrent 的方式來看 (回想一下 concurrency 的意思,Programming as the composition of independently excuting process)。這一個 gopher 燒書當成一個獨立的 process,兩個 gopher 燒書其實就是兩個不相依 process 的組合啦。 當我們將 gopher 看成一個獨立的 process,並且把他擴展成兩個甚至更多個 gopher 在燒書,這其實就是 concurrent desing 了。
最後 Rob Pike 對這兩組 gopher 燒書給出了一個結論,
這兩隻 gopher 的設計,本身不一定是 parallel 的,因為兩支 gopher 不一定要同時工作,而且工作結果也是正確的不會亂套。但是這個設計是可以設計成 parallel 的,因為兩隻 gopher 也可以同時工作。
這裡我認為 Rob Pike,想要表達的是,你既然已經可以把一個地鼠燒書當成一個獨立的 process 運作,你就可以藉由組合這個 process,讓它們各自良好的工作且不互相影響。當你完成一個 concurrent design 時, parallel 就只是一個選項而已。也就是說,我認為的 concurrent design 就是需要你把一個事情拆解成幾個獨立 process 的能力,當拆解完成後就能輕易的擴展,增加效能。
在後續的影片中,Rob Pike 給出了更多 gopher 例子來了解 concurrent design