文章目录
一、核心定义
| 概念 | 核心定义 | 比喻 |
|---|---|---|
| 并发(Concurrency) | 同一时间段内处理多个任务(任务交替执行,CPU 核心数 ≤ 任务数) | 一个厨师同时处理点餐、炒菜、出餐:先炒两口菜,停下来接订单,再回去炒菜(交替做) |
| 并行(Parallelism) | 同一时刻执行多个任务(任务同时执行,CPU 核心数 ≥ 任务数) | 两个厨师同时炒菜,一个炒番茄炒蛋,一个炒青椒肉丝(同时做) |
补充:
- 并发的核心是任务切换(CPU 时间片轮转),看似 "同时"(宏观),实则 "交替"(微观)
- 并行的核心是任务同时执行,依赖多核 CPU 硬件支持
- 并发是 "处理多任务的能力",并行是 "同时执行多任务的状态"
二、底层原理
1. 并发的实现原理(单核 CPU 场景)
单核 CPU 无法真正并行执行多个线程,只能通过时间片轮转调度算法实现并发:
- CPU 给每个线程分配极短的时间片(如 10ms)
- 线程 A 执行 10ms 后,CPU 保存线程 A 的上下文(执行状态),切换到线程 B
- 线程 B 执行 10ms 后,再切换回线程 A,恢复上下文继续执行
- 由于切换速度极快(纳秒级),人类宏观感知上像 "同时执行"
2. 并行的实现原理(多核 CPU 场景)
多核 CPU 中,不同核心可以同时执行不同线程:
- 线程 A 在 CPU 核心 1 执行,线程 B 在 CPU 核心 2 执行
- 两个线程无切换,真正 "同时" 运行,效率更高
- 多核 CPU 中,既可以有并发(同一核心交替执行多任务),也可以有并行(多核心同时执行多任务)
三、适用场景
| 场景类型 | 推荐 | 原因 |
|---|---|---|
| IO 密集型任务(如网络请求、文件读写) | 并发 | 任务大部分时间在等待 IO,CPU 空闲时可切换执行其他任务,提升吞吐量 |
| CPU 密集型任务(如大数据计算、数值运算) | 并行 | 任务需要持续占用 CPU,多核并行可避免上下文切换,大幅缩短总耗时 |
| 任务间有依赖关系(如任务 B 依赖任务 A 的结果) | 并发 | 无法并行执行,只能通过并发调度顺序执行 |
| 任务间完全独立(如多个独立的计算任务) | 并行 | 多核同时执行,效率最大化 |
注意:只有在CPU多核情况下才能提高效率,单核情况下依旧是轮流执行
四、总结
- 核心区别:并发是 "交替处理多任务"(单核),并行是 "同时执行多任务"(多核)
- 底层支撑:并发依赖 CPU 时间片轮转,并行依赖多核硬件