主题切换
并行与并发的区别
一、核心定义
- 并发(Concurrency):同一时间应对多件事情的能力。多个线程/任务轮流使用CPU时间片,宏观上同时运行,微观上仍是串行执行。
- 并行(Parallelism):同一时间动手做多件事情的能力。多个线程/任务在不同CPU核心上同时执行,真正实现同时运行。
二、不同CPU环境下的表现
1. 单核CPU
- 只能实现并发:操作系统通过时间片轮转调度,让多个线程轮流使用同一个CPU核心。由于切换速度极快,人类感知为“同时运行”,但微观上仍是串行执行。
2. 多核CPU
- 可同时实现并发+并行:
- 并发:多个线程轮流使用不同核心的时间片
- 并行:多个线程在不同核心上同时执行,互不干扰
三、通俗理解
- 并发:一个人同时处理做饭、打扫卫生、喂奶,轮流交替做这些事,宏观上看起来在同时进行。
- 并行:三个人分别负责做饭、打扫卫生、喂奶,同时开工,互不干扰,真正同时完成多件事。
- 混合场景:两个人一起处理家务,既存在分工(并行),也存在对锅等资源的竞争(并发)。
四、面试高频问题解析
问:并发和并行的区别是什么?
答: 并发指宏观上多个任务同时推进,微观上交替执行,依靠CPU时间片切换实现;并行指多个任务在多个CPU核心上同一时刻真正同时执行。单核CPU仅能实现并发,多核CPU才可支持并行。
问:单核CPU能实现并行吗?
答: 单核CPU同一时刻只能运行一个线程,无法实现并行,只能通过时间片轮转的方式模拟并发执行。
问:并发和并行分别适合什么场景?
答: 并发多用于IO密集型任务,利用线程切换填补IO等待空隙,提升整体吞吐量;并行多用于计算密集型任务,借助多核CPU同时运算,缩短整体执行耗时。
问:并发任务为何会给人同时运行的感觉?
答: CPU线程切换的时间片间隔极短,切换速度远超人体感知,因此多个交替执行的任务,在宏观视角下看起来是同时运行的。