天天看点

并发 != 并行

我真的很喜欢听​​卡尔·休伊特​​谈论计算机科学,他经常重复的是“并发不等于并行”。对我来说,二者没有什么区别,坦白说,我从来没有认真去研究过它。

上个星期,我偶然发现了Rob Pike关于这个话题的博客——​​《并发不等于并行》​​,这促使我最终对此做了一些研究。这是我的收获。

注意:就像生活中的大多数事情一样,很多人认为两者之间是没有区别的。

并发

并发是在相同的时间间隔内执行任务。

这里的重要细节是,任务不一定同时执行,但是它们可以划分为交错在一起的更小的任务。

并发 != 并行

有一个很好的例子,厨房就经常会有这样并发的情况出现,想象一个厨师在切莴苣的同时还时不时地检查烤箱里的东西的烤制进度。他需要停止切莴苣,检查烤箱,停止检查烤箱,然后再开始切割,并重复这个过程,直到完成。

如上所见,并发主要与逻辑顺序有关,没有并发,厨师必须等到烤箱中的肉准备好才能切莴苣。

并行

并行,从字面上解释是在同一时间同时执行任务,顾名思义,它们是并行执行的。

并发 != 并行

回到厨房,现在我们拥有2个厨师,一个负责检查烤箱,同时另一位负责切莴苣。我们分别把检查烤箱和切莴苣2件事,同时分派给2个厨师负责。

并行是并发的一个子类:在同时执行多个任务之前,首先必须管理多个任务。

来源

l  ​​Brave Clojure​​: 并发与并行的神圣艺术

l  ​​Haskell Wiki​​

l  ​​Rob Pike’s talk​​

如果你有时间,可以看看卡尔·休伊特和维基百科主持人之间​​关于并发和并行​​的幽默交流。

继续阅读