多线程 并行和并发理解

2019-03-29  本文已影响0人  夜空下最亮的亮点

并行(parallelism)

这个概念很好理解。所谓并行,就是同时执行的意思,无需过度解读。判断程序是否处于并行的状态,就看同一时刻是否有超过一个“工作单位”在运行就好了。所以,

并发(concurrency)

要理解“并发”这个概念,必须得清楚,并发指的是程序的“结构”。当我们说这个程序是并发的,实际上,这句话应当表述成“这个程序采用了支持并发的设计”。好,既然并发指的是人为设计的结构,那么怎样的程序结构才叫做支持并发的设计

正确的并发设计的标准是:使多个操作可以在重叠的时间段内进行(two tasks can start, run, and complete in overlapping time periods)。
并发设计让并发执行成为可能,而并行是并发执行的一种模式。
并行指物理上同时执行,并发指能够让多个任务在逻辑上交织执行的程序设计

行,当然是在重叠的时间段内执行,但是另外一种执行模式,也属于在重叠时间段内进行。这就是协程

使用协程时,程序的执行看起来往往是这个样子:

coroutine.jpg

task1, task2 是两段不同的代码,比如两个函数,其中黑色块代表某段代码正在执行。注意,这里从始至终,在任何一个时间点上都只有一段代码在执行,但是,由于 task1 和 task2 在重叠的时间段内执行,所以这是一个支持并发的设计。与并行不同,单核单线程能支持并发。

。其实主要还是因为这两个词都有狭义和广义的解释的原因。如果从广义上来说,并行必然是并发,因为广义的并发的高度抽象定义可以说是,多个问题或者问题的几个部分在一个重叠的时间段内被解决。

不过个人还是喜欢用并发来表示通过调度器以及上下文切换等实现的多任务或者其他类似的技术和手段(其实是不知道用什么词代替好),用并行来表示严格的物理上的并行。

上一篇下一篇

猜你喜欢

热点阅读