一个例子解决 : 洗衣做饭
假设你需要洗衣服和做饭(两个任务)
- 串行 : 先洗衣服,洗完后再做饭。(或者先做饭,做完后再洗衣)
- 并行 : 将洗衣盆拿到灶台,左右炒菜做饭,右手搓洗衣服。
- 并发 : 一会洗衣,一会做饭,但疾如闪电。
[注] 上述过程,体现了多任务,以人手为操作主体,以<2并行>理解,左手相当于一个CPU,右手相当于一个CPU,两者一起工作
- 并行是指两个或多个事件在
同一时刻
执行,由多个CPU执行不同的事件。- 并发是指两个或多个事件在
同一时间间隔
发生(间隔恍如闪电),宏观上来看,是"同时"执行。
在并发程序中,可以同时拥有两个或者多个线程,这意味着,如果程序在单核处理器上运行,那么这两个线程将交替的换入或者换出内存,这些线程是同时 '存在' --- 即每个线程都处于执行过程中的某一个状态。
如果程序能够并行执行,那么一定运行在多核处理器核上,此时,程序中的每个线程都将分配到一个独立的处理器核上,因此可以同时运行。
- 若某个系统支持两个或者多个动作(Action)
同时存在
,那么此系统是一个并发系统。- 若某个系统支持两个或者多个动作(Action)
同时执行
,那么此系统是一个并行系统。综上 : "并行" 概念是 "并发" 概念的一个子集,也就是,可以编写一个拥有多个线程或者进程的并发程序,但如果没有多核处理器来执行,那么就不能以并行方式来执行代码。
图解
-
并发实际上是一个物理CPU(也可以是多个CPU)在若干道程序之间多路复用,并发行是对
有限物理资源
强制行使多用户共享以提高效率;
并发,是在同一个CPU上同时(不是真正的同时,宏观上的同时,因为对于机器而言,CPU在多道程序间切换时间很短)并发
-
并行是指两个或以上的动作在同一时刻发生,在多道程序环境下,并行性是多个程同时在不同CPU上执行。
并行,每个CPU运行一个程序并行