Day6 - 读 Concurrency is not Parallelism - Rob Pike (一)

本篇是看 Concurrency is not Parallelism 的心得

Concurrency is not Parallelism - Rob Pike 藉由 Parallelism 的对比,来讲解什麽是 Concurrency.

什麽是 Concurrency?

Programming as the composition of independently excuting process. (此 process 非 linux process,它是更广义的)

Concurrency 的重点放在各个不相依 process 的组合

什麽是 Parallelism?

Programming as the simultaneous execution of (possibly related) computation.

Parallelism 的重点是有多个同时执行的运算。


到这我也还不懂 Rob Pike 想说什麽?
接着 Rob Pike 放到下一页投影片
https://ithelp.ithome.com.tw/upload/images/20210907/20140148SvLHZaFSKE.png

这时候我开始懂了,concurrency 指的是一种程序架构,也是一种思考方式,也可以说是解决问题的一种方式。Rob Pike 马上举出了一个例子:OS 可以同时 (这里的同时是指 concurrent) 管理的滑鼠,键盘,萤幕,并且正常的运作,这就是一个 concurrent 的设计的实际例子,但请注意:一个 OS 不一定要同时 (Parallel) 管理这些设备,这台电脑可以是单核心的。这句话很玄,但也和投影片上所说的相互呼印, Concurrency provides a way to structure a solution to solve a problem that may (but not necessarily) be parallelizable.,cocurrent 提供了解决问题的方法,这解决问题的方法可以是 parallel。


这边我在 jserv 的文章也找到了更好的解释 Toward Concurrency

Concurrency 是指程序架构,将程序拆开成多个可独立运作的工作,像是驱动程序都可独立运作,但不需要平行化

  • 拆开多个的工作不一定要同时运行
  • 多个工作在单核心 CPU 上运行

Parallelism 是指程序执行,同时执行多个程序。Concurrency 可能会用到 parallelism,但不一定要用 parallelism 才能实现 concurrency。eg:Vector dot product

  • 程序会同时执行 (例如:fork 後,同时执行,再收集结果 [join])
  • 一个工作在多核心 CPU 上运行

Go 提供了一套 concurrent 的工具,这工具就是 goroutine 和 channel,我猜 Rob Pike 想说的是,你应该要 think concurrency,有了这个思考模式加上 go 提供的工具,将会设计出更有效率的程序。

我想这也是 go 的设计方法之一:只要有办法把一个程序执行,拆分成几个不相依的执行个体,你就可以使用 goroutine 加上 channel 设计出 concurrent 的程序。

明日的文章,就把这影片的後半段的程序实例读一读写个心得。


<<:  Day 5 - Object & Function

>>:  SOURCEPATH 能帮助我们什麽呢?

Service Container

Service Container 是 Laravel 框架中相当重点的一个功能,主要是用来节省撰写...

Day28 Android - tablayout+fragment

今天主要要来使用tablayout和fragment的结合,我认为和之前讲的ButtomNaviga...

day27_ARM 在 Server 领域的发展 (下)

云端托管服务 云端托管服务其实相当於使用硬体供应商准备的 Server 来运行我们准备的服务,他们可...

Promise 方法

今天继续认识四种 Promise 可以使用的方法,基础的用法可以先参考昨天的文章 Promise.a...

JavaScript入门 Day14_如何使用数字6

今天要讲的是 Math.random( ) 那这个是什麽呢? random 有随机的意思 所以在ja...