本篇是看 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 放到下一页投影片
这时候我开始懂了,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 是指程序架构,将程序拆开成多个可独立运作的工作,像是驱动程序都可独立运作,但不需要平行化
Parallelism 是指程序执行,同时执行多个程序。Concurrency 可能会用到 parallelism,但不一定要用 parallelism 才能实现 concurrency。eg:Vector dot product
Go 提供了一套 concurrent 的工具,这工具就是 goroutine 和 channel,我猜 Rob Pike 想说的是,你应该要 think concurrency,有了这个思考模式加上 go 提供的工具,将会设计出更有效率的程序。
我想这也是 go 的设计方法之一:只要有办法把一个程序执行,拆分成几个不相依的执行个体,你就可以使用 goroutine 加上 channel 设计出 concurrent 的程序。
明日的文章,就把这影片的後半段的程序实例读一读写个心得。
Service Container 是 Laravel 框架中相当重点的一个功能,主要是用来节省撰写...
今天主要要来使用tablayout和fragment的结合,我认为和之前讲的ButtomNaviga...
云端托管服务 云端托管服务其实相当於使用硬体供应商准备的 Server 来运行我们准备的服务,他们可...
今天继续认识四种 Promise 可以使用的方法,基础的用法可以先参考昨天的文章 Promise.a...
今天要讲的是 Math.random( ) 那这个是什麽呢? random 有随机的意思 所以在ja...