goroutine、channel、context 与取消传播的关系
串起 Go 并发里的执行单元、通信原语和生命周期控制机制,建立任务启动、通信和停止的统一心智。
#type / synthesis
#status / growing
#tech / dev
#resource / go
[!info] related notes
- 所属 MOC: Go 并发 MOC
- 相关概念: Go goroutine, Go channel, Go context
goroutine、channel、context 与取消传播的关系
范围
这篇笔记覆盖 Go 并发第一阶段最核心的三件事:
- 谁在执行
- 谁在通信
- 谁在决定什么时候停
为什么要放在一起理解
单独学 goroutine、channel、context 很容易变成 API 记忆题。但真实项目里它们通常同时出现:
- goroutine 负责并发执行
- channel 负责传递结果或协调时序
- context 负责传递取消和超时
依赖路径 / 调用链 / 演进链
一条典型链路是:
- 主流程创建
context - 主流程启动一个或多个 goroutine
- goroutine 通过 channel 回传结果或信号
- 一旦超时、上游取消或某个关键步骤失败,
context触发取消 - 各 goroutine 监听
ctx.Done()后尽快退出
对比与易混淆点
goroutine解决的是“并发执行”channel解决的是“怎么通信 / 怎么同步”context解决的是“什么时候该停”
它们各自不是彼此替代品。
一条实用经验
如果你的 goroutine 启动后没有:
- 返回路径
- 取消路径
- 错误处理路径
那它大概率已经接近潜在泄漏。