Appearance
并发进阶(HPC/AI-Infra 向)—— 无锁、线程池、任务系统
HPC/AI Infra 的并发考点远超「会加锁」:会考线程模型、任务调度、无锁结构、锁粒度与争用、并行算法、协程。本篇为深度补充,承接基础篇
threads-basics.md/atomic-memoryorder.md/deadlock-singleton.md。
子文档导航
| 文件 | 内容 |
|---|---|
index.md | 基础并发总览(已建) |
thread-pool.md | 线程池设计(工作窃取、任务队列) |
lockfree.md | 无锁编程(CAS、无锁栈/队列、ABA、内存序落地) |
lock-optimize.md | 锁粒度、读写锁、自旋 vs 互斥、锁竞争模型 |
parallel-algo.md | 并行算法:并行 for/reduce、分治、任务依赖/流水线 |
coroutine.md | C++20 协程(co_await/异步化) |
HPC 视角:为什么并发这么考
- AI Infra 高频词:吞吐、延迟、核数利用、Amdahl 定律、锁竞争成为瓶颈、cache 一致性流量。
- 面试常从「你项目线程模型怎么设计」切入,追问:
- 线程数怎么定(CPU 核数、超线程、IO vs 计算)?
- 有没有锁竞争热点?怎么测/消除(用原子、无锁、分区减少共享)?
- 任务粒度多大(过细调度开销>收益)?
- 假共享、内存序、命令屏障了解多少?
关键结论速记(可直接答)
- 线程数经验:纯计算 ≈ 物理核数(勿用超线程核翻倍编满);计算+IO ≈ 可用核×(1+等待比)。平台:
std::thread::hardware_concurrency()。 - 并发上界:Amdahl:
S = 1 / ((1-P) + P/N)——串行部分决定天花板。 - 避免争用优先于锁技巧:先分区、无锁、再锁优化,锁再快也不如没锁。
- 假共享:不同线程写相邻缓存行上不同变量 → 一致性流量放大,逐个
alignas(64)隔离。 - 多核正确性必须同步;但性能目标则要尽量少同步 + 同步点批量化。