[整理] 并发和并行的区别和联系
顾名思义,「并发」强调的是可以一起「出『发』」,「并行」强调的是可以一起「执『行』」。
- 如果某个系统支持两个或者多个动作(Action)同时存在,那么这个系统就是一个并发系统。
- 如果某个系统支持两个或者多个动作同时执行,那么这个系统就是一个并行系统。
并发系统与并行系统这两个定义之间的关键差异在于“存在”这个词。
在并发程序中可以同时拥有两个或者多个线程。这意味着,如果程序在单核处理器上运行,那么这两个线程将交替地换入或者换出内存。
这些线程是同时“存在”的——每个线程都处于执行过程中的某个状态。
如果程序能够并行执行,那么就一定是运行在多核处理器上。此时,程序中的每个线程都将分配到一个独立的处理器核上,因此可以同时运行。
结论:“并行”概念是“并发”概念的一个子集。
与可以一起出发的并发(concurrent)相对的是不可以一起出发的顺序(sequential):
- 顺序:上一个开始执行的任务完成后,当前任务才能开始执行
- 并发:无论上一个开始执行的任务是否完成,当前任务都可以开始执行
(也就是说,A B 顺序执行的话,A 一定会比 B 先完成,而并发执行则不一定。)
与可以一起执行的并行(parallel)相对的是不可以一起执行的串行(serial):
- 串行:有一个任务执行单元,从物理上就只能一个任务、一个任务地执行
- 并行:有多个任务执行单元,从物理上就可以多个任务一起执行
(也就是说,在任意时间点上,串行执行时必然只有一个任务在执行,而并行则不一定。)
综上,并发与并行并不是互斥的概念,只是前者关注的是任务的抽象调度;后者关注的是任务的实际执行 而它们又是相关的,比如并行一定会允许并发
附记:在茫茫的信息海洋中,遇到就是有缘,期待回复交流,为缘分留下痕迹……