【05】并发与并行
- 原文地址:Concurrency Models
- 作者:Jakob Jenkov
并发和并行,这两个词经常会再多线程程序中被提及。 那两者是一个含义吗?
当然,答案是否定的。虽然字面上很相似,但两者不是一个感念。 接下来就来看看两者的区别。
并发
并发意味着应用在同时调度多个任务同时处理。 那么,如果计算机只有一个CPU,应用虽然无法在一个所谓的同一时间点 上调度多个任务同时执行。 但是在应用内部还是同时在处理多个任务。 开始一个任务而不用等待另一个任务完成,也即是,多个任务交叉执行。如图所示:
并行
并行意味着,应用将某个任务分割成多个可以并行处理的子任务,在多个CPU上同时执行。 如图所示:
细节上的对比
正如你看到的,并发指应用同时处理多个不同任务的情况。 应用可以一次只处理一个任务(串行),或者同时处理多个任务(并发)。
而并行,则是指的应用如何处理每个个体任务的情况。应用可以从某个任务的开始一直处理到结束,也可以将任务分割成多个子任务并行处理。
所以,并发应用就是指,同时处理多个任务,而且这些任务不能分解成子任务来执行。
而并行应用,就是应用只能一次执行一个任务,而这个任务是可以分解成多个并行处理的子任务。
另外,应用可以既不是并发也不是并行。就是说,一次只处理一个任务,而且这个还不能分解。串行化执行。
最后还有一种情况,应用既是并发也是并行的。比如,同时执行多个任务,但是每个任务都可以分解成多个并行处理的子任务。 但是这种情况下,并发和并行的好处,可能都得不到了。 对于CPU来说原本的多任务可能就已经很忙碌了,而一旦任务还可以再次分解成子任务,对于CPU的压力就会激增。所以,结合使用,可能在性能上提高并不大,甚至会造成性能不升反降的情况。 使用这个方式之前,请仔细的评估和测量,分析之后再决定是否使用!
转载于:https://my.oschina.net/roccn/blog/1377584