Go pipeline 模式
pipeline 模式把一组处理步骤拆成多个阶段,通过 channel 串联数据流,适合表达有明确处理阶段的并发工作流。
#type / concept
#status / growing
#tech / dev / backend
#resource / go
[!info] related notes
- 所属 MOC: Go 服务工程化 MOC
- 前置概念: Go channel, Go select
- 并列概念: Go worker pool
Go pipeline 模式
一句话定义
pipeline 模式把处理流程拆成多个阶段,每个阶段通过 channel 连接前后步骤,从而把数据流和并发边界表达得更清楚。
核心机制 / 工作原理
它最适合的不是“很多独立任务”,而是“同一份数据要依次经过多个处理阶段”的场景。
一个典型 pipeline 会包含:
- 输入阶段
- 一个或多个处理阶段
- 输出阶段
每个阶段都可以由 goroutine 驱动,并通过 channel 把结果交给下一阶段。
最小例子 / 最小场景
比如“读取数据 -> 解析 -> 过滤 -> 聚合 -> 输出”的链路,如果每一步都很明确,pipeline 往往比把所有逻辑揉进一个 worker 更清晰。
为什么这部分重要
Go 的 channel 不只是“传个值”,它非常适合把阶段边界显式表达出来。pipeline 正是这种表达方式的典型落地。
边界与易混淆点
- pipeline 更强调阶段流转,worker pool 更强调并发度控制
- 阶段越多,越要注意取消传播和关闭顺序
- 如果数据流并不稳定分阶段,pipeline 反而可能过度设计