Skip to content

并发进阶(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.mdC++20 协程(co_await/异步化)

HPC 视角:为什么并发这么考

  • AI Infra 高频词:吞吐、延迟、核数利用、Amdahl 定律、锁竞争成为瓶颈、cache 一致性流量
  • 面试常从「你项目线程模型怎么设计」切入,追问:
    1. 线程数怎么定(CPU 核数、超线程、IO vs 计算)?
    2. 有没有锁竞争热点?怎么测/消除(用原子、无锁、分区减少共享)?
    3. 任务粒度多大(过细调度开销>收益)?
    4. 假共享、内存序、命令屏障了解多少?

关键结论速记(可直接答)

  1. 线程数经验:纯计算 ≈ 物理核数(勿用超线程核翻倍编满);计算+IO ≈ 可用核×(1+等待比)。平台:std::thread::hardware_concurrency()
  2. 并发上界:Amdahl:S = 1 / ((1-P) + P/N)——串行部分决定天花板。
  3. 避免争用优先于锁技巧:先分区、无锁、再锁优化,锁再快也不如没锁。
  4. 假共享:不同线程写相邻缓存行上不同变量 → 一致性流量放大,逐个 alignas(64) 隔离。
  5. 多核正确性必须同步;但性能目标则要尽量少同步 + 同步点批量化

C++ 面试八股 · VitePress 版