Go Worker Pools

1 Apr 2025 | 2 分钟阅读

工作池是一种设计模式,其中固定数量的 m 个工作者 (Go 协程) 在工作队列 (Go 通道) 中处理 n 个任务。 工作保存在队列中,直到一个工作者完成其当前任务并拉取一个新的任务。

让我们通过一个例子来看看它

输出

worker 2 processing job 1
worker 1 processing job 2
worker 2 processing job 3
worker 1 processing job 4
worker 1 processing job 5
worker 2 processing job 6
worker 1 processing job 7
worker 2 processing job 8

在这个例子中,启动了 2 个工作者,并将 9 个工作项放入作业通道中。 工作者有一个带有 time.Sleep 的工作循环,因此每个工作者最终都会处理 2 个作业。在所有工作都放入通道后,使用 close 关闭通道,这会向所有 2 个工作者发出信号,他们可以通过从循环中退出循环来结束他们的工作循环。


下一个主题Golang-time