跳到主要内容

并发编程技术文章

浏览全部文章标签

Go 并发实战:从零实现一个高并发安全的任务调度器

· 阅读需 25 分钟
ahKevinXy
作者

批量生成报表、发送通知、处理图片时,一个常见写法是:每收到一个任务,就启动一个 goroutine。

任务数量少时,这种写法很方便。请求突然增多后,问题却往往出现在数据库连接池、第三方接口和内存上:执行中的任务越来越多,等待资源的 goroutine 也持续积累,服务难以控制负载,更难判断什么时候可以安全退出。

这一篇用 Go 标准库实现一个单进程、即时执行的任务调度器:固定数量的 worker 执行任务,有界队列吸收短时积压,队列满时明确拒绝,关闭时停止接收并等待已接收任务结束。

重点是把提交、执行、取消和停机的并发语义说清楚。这里不实现 Cron、定时触发或分布式任务分配,也不提供进程崩溃后的任务恢复。