Day7 - 读 Concurrency is not Parallelism - Rob Pike (二)

续上篇,Day6 - 读 Concurrency is not Parallelism - Rob Pike (一)
在影片的中段,Rob Pike 使用了 gopher 烧书的例子,谈谈什麽是 concurrent design。
一开始给出了一个 gopher 烧书,但一个 gohper 会跑很久,想办法来加快吧
https://ithelp.ithome.com.tw/upload/images/20210907/20140148xc3Tb6y2Nx.png

一个 gopher 可能跑得太久,那就来两个吧https://ithelp.ithome.com.tw/upload/images/20210907/20140148Znbz7C4WE7.png

可以发现只有一个书堆,一个焚化炉,gopher 可能会在书堆时或在焚化炉时会塞车,而且也需要两只 gopher 互相沟通传送讯息,所以书堆和焚化炉是个瓶颈。

简单,那就连书堆跟焚化炉都各加一个啊,两个人各烧各的,就解决上面的瓶颈了
https://ithelp.ithome.com.tw/upload/images/20210907/20140148wzzTUEurvL.png

咦,这不就是 Parallel 了吗?对没错。但是我们先不要用 parallel 的角度去想这件事情,如果用 concurrent 的方式来看 (回想一下 concurrency 的意思,Programming as the composition of independently excuting process)。这一个 gopher 烧书当成一个独立的 process,两个 gopher 烧书其实就是两个不相依 process 的组合啦。 当我们将 gopher 看成一个独立的 process,并且把他扩展成两个甚至更多个 gopher 在烧书,这其实就是 concurrent desing 了。

https://ithelp.ithome.com.tw/upload/images/20210907/20140148MbKKLDiEyg.png

最後 Rob Pike 对这两组 gopher 烧书给出了一个结论,
这两只 gopher 的设计,本身不一定是 parallel 的,因为两支 gopher 不一定要同时工作,而且工作结果也是正确的不会乱套。但是这个设计是可以设计成 parallel 的,因为两只 gopher 也可以同时工作。

这里我认为 Rob Pike,想要表达的是,你既然已经可以把一个地鼠烧书当成一个独立的 process 运作,你就可以藉由组合这个 process,让它们各自良好的工作且不互相影响。当你完成一个 concurrent design 时, parallel 就只是一个选项而已。也就是说,我认为的 concurrent design 就是需要你把一个事情拆解成几个独立 process 的能力,当拆解完成後就能轻易的扩展,增加效能。

在後续的影片中,Rob Pike 给出了更多 gopher 例子来了解 concurrent design


<<:  [30天 Vue学好学满 DAY7] 监听器(Watch)

>>:  #6. Scroll Animation(原生JS版), #7. Progress Steps(原生JS版)

Day 18:「极速开发」- Vitawind

「闪电 + 疾风的组合吗? 不错不错!」 既然我们之前都说了要用 Vue + Tailwind 来...

Day21 - 在 XState, 状态机器里无穷尽的状态、 资料:Extended State and context - 1

1. Extended State 前面学习到的 FSM ,我们透过枚举、列举 (Enumerate...

用powershell 远端登入Microsoft 365

各位大大好 请问公司的电脑都有加入网域,用部署工具将office 365安装到各个电脑,但是想用po...

[30天 Vue学好学满 DAY6] 计算属性(Computed)

计算属性(Computed) 无传入值 具回传值(return) 对来源属性进行操作-> 触发...