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

续上篇 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 说,这例子太简单了,来点真实的。

今天就到这啦,终於写到这了,明天就是这一个演讲的最後一篇。


<<:  LeetCode解题 Day09

>>:  D8: 工程师太师了: 第4.5话

Day 02 : Python 基础观念 (1)

变数 变数基本上是用来暂时储存资料的地方,可以想像在我们执行程序的时候,需要用一个代号去代表我们需要...

第一章 之三

先前大致上看了这三个网域供应商都有各自的云端主机空间平台提供,接下来就针对空间与功能做个评比分享给大...

Day 29 Unittest

在做完了程序之後,就要来测试一下是否正常运作对吧。不过当你做完了数十个 API 之後,我相信你一定不...

Day 14 分享你的 Example!

该文章同步发布於:我的部落格 前言 昨天结尾有稍微提到,若是有相同的 example 该怎麽办? ...

Day5 利用 Vscode 执行 PHP

真的是大坑,从我开始学程序起,就都是用Vscode这个IDE,也因此我蛮习惯用这个IDE,不想再换别...