703 页的 PDF、18 章正文加 5 个附录、每年更新 3 到 4 次、许可是 CC BY-SA 3.0 US(可商用,但需署名并以同样方式共享)——这是 Paul
E. McKenney(Meta)主编的《Is Parallel Programming Hard, And, If So, What Can You Do About It?》,当前版本 v2026.06.21a。
它不是入门读物:全书聚焦共享内存并行编程,明确写着面向「贴近软件栈底部」的代码——操作系统内核、并行数据管理系统、底层库,示例语言是 C。想读之前先弄清三件事:它的骨架是什么、按什么顺序读、以及在谈性能之前怎么把正确性查清楚。
骨架:先讲硬件,再讲同步,最后讲验证
| 章 | 标题 | 起页 |
| 1 | How To Use This Book(阅读路线、快速测验) | 1 |
| 2 | Introduction(并行难在哪、三个目标) | 7 |
| 3 | Hardware and its Habits(缓存、一致性、I/O 开销) | 19 |
| 4 | Tools of the Trade(POSIX、C11 原子操作等) | 35 |
| 5 | Counting(计数器为什么是并行入门试金石) | 55 |
| 6 | Partitioning and Synchronization Design | 79 |
| 7 | Locking(应用里是英雄,并行化串行库时是反派) | 107 |
| 8 | Data Ownership | 131 |
| 9 | Deferred Processing(引用计数、危险指针、顺序锁、RCU) | 135 |
| 10 | Data Structures(以哈希表为例) | 199 |
| 11 | Validation(验证) | 219 |
| 12 | Formal Verification(Promela/Spin 状态空间搜索) | 243 |
| 13 | Putting It All Together(综合练习) | 283 |
| 14 | Advanced Synchronization | 309 |
| 15 | Advanced Synchronization: Memory Ordering | 337 |
| 16 | Ease of Use | 399 |
| 17 | Conflicting Visions of the Future | 403 |
| 18 | Looking Forward and Back | 441 |
附录:A 重要问题(445)、C 为什么需要内存屏障(467)、D 风格指南(483)、E 快速测验答案(495)。
编者在第 1 章给出的读法
路线是线性的:先看第 3 章硬件习惯(不知道缓存和内存屏障的成本,后面全是空中楼阁),再进第 5 章计数器和第 6 章分区设计,这三个是同步设计的地基;然后按问题类型选第 7 章锁、第 8 章数据归属、第 9 章延迟处理;第 10 章用哈希表把这些手法串一遍;第 11、12 章讲怎么验证;第 13 章是一组难度不等的综合题,适合学完前面内容后练手。
书里遍布「Quick Quiz」(快速测验),答案集中在附录 E(从第 495 页起)。作者的态度写在正文里:最常见的「学习障碍」是以为自己已经懂了,快速测验就是解药;只被动阅读能拿到一些东西,但要真正获得解题与写代码的能力,必须动手做题。附录 C 是读者最常翻的一个,专讲内存顺序。
提速之前先查什么(第 11、12 章的顺序本身就是答案)
这本书把「性能估计」放在验证章的最后一节(11.
7),前面六节依次是:bug 从哪来、需要什么心态、什么时候开始验证、开源协作方式、追踪(tracing)、断言、静态分析、代码评审(检查/走查/自检)、概率与「海森堡 bug」(离散测试统计、连续测试统计、如何猎捕)。也就是说,顺序是:先建立「哪里会错」的假设 → 用追踪和断言把状态暴露出来 → 静态分析和评审补漏 → 用统计方法对付只在特定时序下复现的问题 → 最后才谈基准测试与性能剖析(基准、剖析、差分剖析、微基准、隔离、干扰检测)。
再往上一层是形式化验证(第 12 章):用 Promela 建模、用 Spin 做状态空间搜索,书里给了锁、QRCU、以及 dynticks 与可抢占 RCU 的完整案例,还专门有一节讲专用状态空间搜索。配套的第 15 章和附录 C 解决更底层的问题:内存顺序、编译期重排、各种依赖关系与多副本原子性——并行代码里最贵的 bug 往往出在这一层。
一句话总结这套方法论:同步正确性靠「建模 + 搜索 + 统计」组合拳,性能靠基准与剖析,两者顺序不能倒。
拿到手和跟进更新
官方下载页提供三种版式:默认双栏(纸质排印最省纸)、单栏(适合大屏电子阅读器)、ebook 版式(手机和小屏阅读器更合适),每个版本都附更新日志。更新节奏是每年 3 到 4 次;不想等正式发版可以直接用公开 git 树,或者用社区维护的持续集成流水线取最新编译好的 PDF。书里的示例代码在 git 树的 CodeSamples 目录(例如查找 rcu_rcpls.c 就会指到附录 B 的例子);第 2、3、5 章和第 9.3 节还有对应的会议演讲视频可对照着看。
许可条款写在书内「Legal Statement」页,逐字如下:「The non-source-code text and images in this document are provided under the terms of the Creative Commons Attribution-Share Alike 3.0 United States license. In brief, you may use the contents of this document for any purpose, personal, commercial, or otherwise, so long as attribution to the authors is main…」——即正文与图片(不含源代码)可用于任何目的,商业用途也包括,条件是署名作者并以相同许可共享衍生作品。
做课件、内部培训、翻译摘编都属于这个范围,但要把署名和许可声明带上。
────────────────
三种版式的下载直链、更新日志、git 树与邮件列表、以及各章节配套视频的地址已整理好,回复后可见。


雷达卡


京公网安备 11010802022788号







