登录
首页 >  Golang >  Go教程

Go fan-in/fan-out 模式:并发流水线如何正确收口

来源:Golang学习网专题原创

时间:2026-06-09 07:06:00 657浏览 收藏

所属专题:Go 并发治理实战

fan-out 把任务分散给多个 worker,fan-in 再把结果聚合回来。这个模式适合批处理、爬取和计算任务,但最容易出错的不是处理逻辑,而是 channel 关闭和错误取消。

谁发送谁关闭

通常由发送方关闭 channel。多个发送方时,不要让每个 worker 都尝试 close,可以用 WaitGroup 等所有 worker 完成后由单独 goroutine 关闭结果 channel。

错误要能停止生产

如果下游已经失败,生产者还在继续塞任务,会浪费资源。context 应该贯穿生产、处理和聚合。

结果聚合要消费到底

如果聚合端提前返回,worker 可能阻塞在发送结果上。要么使用 context 让 worker 停止,要么确保结果 channel 被排空。

代码示例

results := make(chan Result)
g, ctx := errgroup.WithContext(ctx)
for i := 0; i 

上线检查

  • channel 关闭责任清晰。
  • 错误能取消生产和消费。
  • 提前返回不会留下阻塞发送者。
声明:本文转载于:Golang学习网专题原创 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>