登录
首页 >  Golang >  Go教程

Go worker pool:别让后台任务无限制创建 goroutine

来源:Golang学习网专题原创

时间:2026-06-08 21:06:00 395浏览 收藏

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

消息消费、批量导入、图片处理和报表任务都容易写成“来一个任务开一个 goroutine”。短期看吞吐高,长期看任务高峰会让内存、连接池和 CPU 一起抖动。worker pool 用固定并发换稳定性。

队列必须有容量

无界队列只是把压力藏到内存里。任务队列要有长度上限,超过后选择阻塞、丢弃、返回繁忙或落盘。

worker 数量来自资源预算

如果每个任务都会访问数据库,worker 数不能超过数据库连接池预算。CPU 密集任务则要参考 CPU 核心和单任务耗时。

关闭时要排水

服务退出时要停止接收新任务,等待已有任务完成或超时取消。直接关闭进程会留下半写入状态。

代码示例

jobs := make(chan Job, 100)
for i := 0; i 

上线检查

  • 队列长度可观测。
  • worker 数和下游资源预算一致。
  • 服务停止时能关闭队列并等待 worker 退出。
声明:本文转载于:Golang学习网专题原创 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>