并发(Concurrency)和并行(Parallelism)

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

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

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

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

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

posted on 2017-07-07 00:58  小晓俊  阅读(223)  评论(0编辑  收藏  举报