Wiki
并行是什么
约 1 分钟阅读
并行(parallelism)关注的是:
多个任务是否在同一时刻真的同时执行。
它更偏向性能和吞吐,而不是单纯的程序结构。
1.一个直观理解
如果一件事可以拆成几份独立工作:
任务 A
任务 B
任务 C
任务 D
并且机器有多个 CPU 核心,那么这些任务就可能同时运行。
这就是并行:
多个执行单元
同一时刻
同时干活
2.并行和并发的区别
并发是:
多个任务都在推进
并行是:
多个任务真的同时执行
所以一个程序可以:
- 有并发,但没有并行:单核 CPU 上多个线程轮流执行;
- 有并发,也有并行:多核 CPU 上多个线程同时计算;
- 使用并行算法,但不手动创建线程:让标准库或底层运行时决定怎样执行。
3.并行不等于线程越多越快
线程数量超过硬件能同时执行的数量后,操作系统需要不断切换线程。
线程切换、同步、锁竞争、缓存失效都会带来额外开销。
所以并行优化时要关心:
- 任务能不能拆开?
- 拆开以后是否足够独立?
- 每个任务的计算量是否足够大?
- 任务之间是否频繁争抢同一份数据?
- 并行带来的收益是否大于调度和同步成本?
4.C++ 中可能遇到的并行内容
后续可以继续补充:
- 标准库并行算法;
- execution policy;
- 任务并行;
- 数据并行;
- SIMD 与向量化;
- 线程池与任务调度。
当前先预留这个位置,等并发基础学完后再展开会更合适。