第 05 卷 · Go 并发、运行时与内存管理
本卷的定位与入口
先修:05.01–05.03 需要 Go 函数、类型、接口、错误与进程/线程概念,在学习路线 S2 学习。05.04–05.12 在 S4 补齐系统内存与 I/O 后深化;基本并发使用与运行时实现分别设置前置。
本卷按起步、原理、工程和进阶分层;首次进入时按阶段学习路线选取当前需要的章节。
已完成的独立章稿
05.01 并发任务与生命周期已完成。它承接 03.04 的运行/等待、04.03 的未来 HTTP/WebSocket 需求,从并发与并行开始,用有限小批量讲 go 语句、WaitGroup 的最小等待、结果和错误归属。05.02 同步原语从单会话并发判重推导 Mutex、RWMutex、WaitGroup、Once 与 Cond。05.03 channel 与取消再用容量 2 的发送队列讲缓冲、关闭、select、context 和过载选择。05.04 Go 内存模型在 S4 用两字段快照严谨解释同步边与数据竞争。05.05 Go 调度模型接着区分 G/M/P、系统调用与网络就绪。05.06 内存生命周期再用 8 字节预览与 64 KiB 缓冲讲切片可达性和对象账。05.07 垃圾回收用群聊扇出区分分配率、存活集和 GC 成本。05.08 并发组合再用两个工作者与三槽队列约束执行和积压。05.09 并发验证用发送与关闭交错区分 race、业务结果和任务退出。05.10 性能工具按症状选择 Go profile 与 trace。05.11 优化边界再比较少复制、池化、批量与安全成本。05.12 并发服务复盘把慢设备、积压、取消和退出放到同一时间线。十二章均已成独立长篇,每章 8 节、22 道练习。
IM 主线中的位置
连接的读写任务、共享会话表、关闭责任、有界发送队列、慢客户端、群聊扇出、GC 与分配。
主参照与源码入口见 OpenIM 阅读地图。各章区分公开项目事实与虚构教学规则,在具备先修后对照固定源码。
参考材料怎样进入课程
采用经典资料的知识覆盖与递进思路,结合 Go 和虚构 IM 重新组织。下表对应本卷已完成的十二章;按先修选择章节并完成独立变式。
起步层
| 章节 | 要详细讲解的内容 | IM 练习与验收目标 |
|---|---|---|
| 05.01 并发任务与生命周期 | 并发/并行、goroutine、等待、退出;资源拥有者与错误传播。 | 为有限连接任务定义启动、等待、退出与资源拥有者,说明完成和失败如何被观察。 |
| 05.02 同步原语 | Mutex/RWMutex、WaitGroup、Once、Cond;保护范围与锁顺序。 | 保护共享会话表的一次完整状态变化,构造数据竞争、死锁与业务竞争反例。 |
| 05.03 channel 与取消 | 缓冲、关闭、方向、select、context 树与 deadline。 | 处理接收方停止、发送阻塞和取消传播,明确channel关闭与context结束责任。 |
原理层
| 章节 | 要详细讲解的内容 | IM 练习与验收目标 |
|---|---|---|
| 05.04 内存模型 | happens-before、发布与可见性、数据竞争、原子操作与 CAS。 | 为共享在线状态画同步关系,区分单字段原子操作与多字段业务不变量。 |
| 05.05 调度模型 | G/M/P、运行队列、阻塞、系统调用、抢占与 netpoll 的职责。 | 从可运行、执行和等待解释网关调度,结合G/M/P、系统调用与网络等待。 |
| 05.06 内存生命周期 | 栈与堆、逃逸、分配、对象可达性、切片保留与内存布局。 | 分析小消息视图保留大缓冲的原因,比较复制、分配与对象生命周期。 |
工程层
| 章节 | 要详细讲解的内容 | IM 练习与验收目标 |
|---|---|---|
| 05.07 垃圾回收 | 标记清扫、并发工作、暂停、分配速度、存活集与 GC 目标。 | 区分群聊扇出造成的高分配率和大存活集,提出所需GC与heap观察。 |
| 05.08 并发组合 | 工作池、扇出汇聚、流水线、信号量、按 key 串行和 singleflight。 | 设计有界投递流水线或按会话串行的处理模型,分别限制并发、排队和输入。 |
| 05.09 并发验证 | race、可控制调度、超时失败上限、资源泄漏与故障注入。 | 用信号控制连接关闭与发送的交错,记录race、泄漏及超时检查的范围。 |
进阶层
| 章节 | 要详细讲解的内容 | IM 练习与验收目标 |
|---|---|---|
| 05.10 性能工具与解释 | CPU/heap/mutex/block profile、execution trace、基准与扰动。 | 根据消息时延症状选CPU、heap、mutex、block或trace,并说明工具扰动。 |
| 05.11 优化边界 | 减少分配、复用与池化、批量、局部性;unsafe 和无锁的维护代价。 | 比较消息缓冲复用、批量和池化,验证正确性、负载、内存保留与维护代价。 |
| 05.12 并发服务复盘 | 热点、级联等待、取消失效、内存膨胀和退出失败。 | 复盘一次慢设备、大群积压或取消失效,给出正常、过载、退出与恢复路径。 |
本卷综合任务
设计有界消息处理与投递组件,解释共享状态、退出与取消,给出并发验证、泄漏分析和资源对照。
任务由学习者在具备环境时执行。理论推导、参考示例、个人实现和真实运行记录分别保存,故障与反例属于必需部分。
达到的能力
能解释运行时现象与同步保证的区别;能独立排查并发、等待和内存问题。
用解释、最小实现、失败变式、业务取舍四类证据评审。只有目录、术语定义或参考代码通过,不能直接记为掌握本卷。
本卷章节展开规则
每章从一个明确问题开始,先补齐本章所需定义,再推导机制;至少含一条完整执行过程、一个反例、分层练习、反馈与业务迁移。复杂章节拆成多课,不把整卷知识压成一次速读。
当前编写状态和章节深度要求见课程编写与能力验收。