搜索
写经验 领红包
 > 影视

什么是并发和并行(并发并行的概念)

导语:图解:什么是并发(Concurrency),什么是并行(Parallelism)

并发(Concurrency)和并行(Parallelism)

并发和并行是两个非常容易被混淆的概念。它们都可以表示两个或者多个任务一起执行,但是侧重点有所不同。并发偏重于多个任务交替执行,而多个任务之间有可能还是串行的,而并行是真正意义上的“同时执行”,图1.5很好地诠释了这点。

从严格意义上来说,并行的多个任务是真的同时执行,而对于并发来说,这个过程只是交替的,一会儿执行任务A,一会儿执行任务B,系统会不停地在两者之间切换。但对于外部观察者来说,即使多个任务之间是串行并发的,也会产生多任务并行执行的错觉。

这两种情况在生活中都很常见。我曾经去黄山旅游过两次。黄山风景奇特,有着“五岳归来不看山,黄山归来不看岳”的美誉。只要去过黄山的人都应该知道,导游时常挂在嘴边的“走路不看景,看景不走路”。因为黄山顶上经常下雨,地面湿滑、地形险峻。如果边走边看,跌倒擦伤那是常有的事。为了安全起见,游客被要求看景的时候停下脚步,走路的时候能够专心看着地面,管好双脚,这就是“并发”。它和“边走边看”有着非常奇妙的关系,因为这两种情况都可以被认为是“同时在看景和走路”。

那么在黄山上,真正的“并行”应该是什么样的呢?聪明的同学应该可以想到,那就是坐缆车上山。缆车可以代替步行,你坐在缆车上才能专心欣赏沿途的风景,“走路”全部交给缆车去完成就好了。

实际上,如果系统内只有一个CPU,而使用多进程或者多线程任务,那么真实环境中这些任务不可能是真实并行的,毕竟一个CPU一次只能执行一条指令,在这种情况下多进程或者多线程就是并发的,而不是并行的(操作系统会不停地切换多个任务)。真实的并行也只可能出现在拥有多个CPU的系统中(比如多核CPU)。

由于并发的最终效果可能和并行的效果一样,因此,如果没有特别的需要,我在本书中不会特别强调两者的区别。

内容摘自《实战Java高并发程序设计(第3版)》,本书适合:所有java从业人员,所有数据库工程师阅读。 逻辑顺畅。全书脉络清晰,从Java高并发程序的设计基础开始由底层原理落实到具体案例,环环相扣,完整流畅。结构严谨。总体上循序渐进,逐步提升。每一章都各自有鲜明的侧重点,有利于读者快速抓住重点。 实用性强。本书注重实战,采用了理论结合实践的编写方法,给重要的知识点都安排了代码实例,帮助读者在工作中实战应用。

本文内容由快快网络小美整理编辑!