并发与并行区别
先来一张5岁小孩都能看懂的图解释了并发与并行的区别
- 并发 是两个队列交替使用一台咖啡机。
- 并行是两个队列同时使用两台咖啡机。 > 如果串行,一个队列使用一台咖啡机,那么哪怕前面那个人便秘了去厕所呆半天,后面的人也只能死等着他回来才能去接咖啡,这效率无疑是最低的。
问题一:
并发是不是一个线程,并行是多个线程?
并发和并行都可以是很多个线程,就看这些线程能不能同时被(多个)cpu执行,如果可以就说明是并行,而并发是多个线程被(一个)cpu 轮流切换着执行。
问题二:
如何理解这张图片的关键点?
- 把图中的一个queues来对应一个任务。
队列中的每一个人对应这个任务的步骤。
并发和并行的共同前提肯定是有多个任务要处理(也就是图中的队列数量大于等于2) 再进一步区分:
- 并发强调了其实现的前提是:
要处理的任务必须是可分步骤的(队列中的人数大于等于2);
- 并行强调了其实现的前提是:
必须是多个处理器(咖啡机的数量大于等于2)
记住三个”大于等于2”的数量分别的含义
摘自<<七周七并发模型>>:
并发是指同时有很多事要做,你可以串行处理也可以并行处理。 并行是指同时做多件事。
因此并发和并行是相关的,但是是不同的两个概念。
最后来个生活化的例子:
吃饭的时候先接电话跟后接电话的比较更像是中断优先级高低的不同。
并发应该是一手筷子,一手电话,说一句话,咽一口饭。
并行是咽一口饭同时说一句话,而这光靠一张嘴是办不到的,至少两张嘴。