文档目录

C++ 并发编程

从硬件层理解并发:原子指令、缓存一致性、内存模型、无锁数据结构与零拷贝 IO。

如果你写过并发程序,多半是从 std::mutex 和 std::atomic 开始的。但真正决定性能的, 往往不是你怎么写锁,而是硬件怎么处理冲突:缓存行怎么迁移、内存序怎么约束重排、 CAS 失败一次要付多少代价。

这套文档不从 API 讲起,而是从硬件往上走——先看清 CPU 和内存之间发生了什么, 再回头看 C++ 的原子类型和内存序为什么长成这样。


六个部分

  1. 硬件原子指令 —— 总线锁与缓存锁、x86 的 LOCK 前缀、ARM 的 LL/SC、ABA 的硬件根源
  2. 硬件缓存与内存模型 —— 缓存行与 MESI、伪共享、编译器重排与 CPU 乱序、C++11 内存序
  3. 无锁编程技术 —— Mutex 与 CAS 的成本对比、退避策略、无锁栈与 Michael-Scott 队列
  4. 线程访问模型 —— SPSC / MPSC / SPMC / MPMC 四种模型及各自的工业级实现
  5. 零拷贝与网络 IO —— 传统 IO 的四次拷贝、mmap、io_uring
  6. 补充专题 —— 内存分配器、NUMA、ABA 实战解法、SIMD 与预取、性能测量方法论

怎么读

内容偏底层,建议按顺序读:第二部分的内存模型是第三、四部分的前提, 不先弄懂 Store Buffer 和内存屏障,无锁队列的代码会看得云里雾里。

每节末尾大多有「笔记存档」或「心法」小节,赶时间可以只看那些。