本章导读
卷六回答"怎么让多个执行流协作"。它有一条清晰的三层装配线:原语层(第 53 章线程与四件套同步——并发世界的物理规则)、协作层(第 54~59 章:取消令牌、协程×2、Channel、Future、执行器——把物理规则包装成工程工具)、结构化层(第 60 章任务组与取消终局——把工具装配成有生命周期边界、可停机可审计的并发程序)。两端各有一章独立粒度:第 52 章进程(最粗的隔离单元——跑不可信代码的沙箱)开卷。
本卷知识地图
一条主线:取消贯穿
比单个工具更重要的是取消贯穿全书并发体系这条主线。第 54 章立地基(令牌三件套与传播树);第 55 章协程在让出点感知取消(清理栈保证收尾);第 56 章调度器 Close 即"取消全部";第 57 章通道的等待全部可配令牌;第 58 章 Future 四态终局里取消是一等公民;第 59 章任务接受令牌设检查点;第 60 章任务组把取消树规范化为作用域。读的时候盯住这条线:每一章的取消接口都是第 54 章令牌的方言——理解了令牌,各章的取消姿势零学习成本。这条线的工程意义是优雅停机(第 49 章信号的下半场)——并发的价值不止"跑起来",还在"停得下来"。
三个心智模型
卷六值得带走三个可以复用的心智模型(它们同样适用于任何并发体系)。"共享 vs 消息":数据结构内部用锁/原子(第 53/10 章),模块之间用消息(Channel)——内部紧凑外部清晰,两派不是信仰是分层。"等待的成本阶梯":线程等(1MB 栈×并发数)→ 协程等(几十 KB×并发数)→ Future/回调等(零栈)——按等待量级选工具,"等得多"往下走。"粒度三级":进程(隔离跑不信任的代码)、线程(真并行做计算)、协程(高并发做等待)——三者不是替代关系而是配合关系。三个模型在选型时交叉使用——第 60 章收官的选型地图会把它们叠成一张决策图。它们的价值超出 XRT 本身——评估任何并发库、或决定是否自己造轮子时,先用这三个模型提问。
与前后卷的衔接(本卷是全书的中枢)
向前衔接:卷五把原材料备齐——Future 的初见(第 48 章文件异步)、任务池的雏形、信号的停机触发、观测管线(第 50 章在并发语境的延伸是本章反复引用的)。向后衔接:卷七网络引擎是卷六的最大客户——每连接一协程(54/55)、事件循环即调度器泵、收发经 Channel、结果走 Future;卷九 HTTP 与卷十 xhttp 建立其上;卷十三的聊天/下载器项目是并发组合的实战考场。卷六是全书的中枢——前五卷的能力在此并发化,后四卷的体系以此为基础。
三类读者三种走法
服务端开发者(主力):按序精读 52→58(原语到执行器一条线)——第 60 章收官的结构化并发是你写"请求处理"的直接模板;进程章(51)按需查(调外部工具时读)。嵌入/资源受限开发者:原语章(52)是你的主战场(协程栈内存与调度器按硬件裁剪);Channel/Future 按连接预算取舍;第 60 章的池深度经济学对你尤其关键。从 Go/Erlang 迁移来的开发者:好消息——Channel 语义(含关闭三方规则)与 Go 对齐、结构化并发与 Erlang 监督树神似;需要调整的是"协程绑定线程"(Go 的 goroutine 可迁移——XRT 固定归属)与"共享内存合法存在"(消息不是唯一选择,分层用)。三类读者共享同一条取消主线——它是理解 XRT 并发的最短路径。
一个提醒:并发是正确性杠杆也是复杂度杠杆
卷六的每个工具都在放大什么——放大吞吐(并行)、放大连接数(协程)、放大响应性(异步)。但杠杆放大的是一切:正确的部分被放大,错误的部分(竞态、死锁、泄漏、取消不收尾)也被放大——且被放大的错误更难复现(时序相关)、更难定位(第 50 章观测管线的并发修正项)、更难修复(改对一处可能引入另一处的时序变化)。三个减损习惯:最小并发——先写对单线程版本再并发化(并发的正确性以串行为基准);显式边界——共享了什么、谁等谁、取消树怎么长,全部写成注释与文档(隐式约定在并发里必炸);观测先行——上并发工具前先接好观测(第 50 章管线),让第一次竞态就有曲线可查。杠杆交给有准备的手。
学习检验(离开本卷前自测)
合上书回答八问:四件套各自的语义与 Condition 为什么必须配对 Mutex?取消令牌的"单向传播"与"检查点"各解决什么?协程四态三终态与清理栈保证什么?调度器的泵与 Post 为什么跨线程安全?Channel 关闭三方规则如何保证停机零丢失?Future 四态终局与延续的失败转发?执行器停机协议为什么 Close 必须在 Wait 前?最后:给一个"读多算少等更多"的负载,你怎么组合本卷工具?八问顺畅、最后一问能画出工具组合的架构草图,卷六过关——含糊的回对应章节契约区重读。
📖 本章涉及的 API 参考手册:thread(29 个条目)coroutine(58 个条目)channel(40 个条目)future(85 个条目)
点击查看完整签名、参数约束、返回值与错误说明