行业知识
go并发模式之----工作池/协程池模式
2026-11-08 19:03:43
来源:互联网转载
常见���式之四:工作池/协程池模式
定义
顾名思义,就是有固定数量的工人(协程),去执行批量的任务
使用场景
-
适用于需要限制并发执行任务数量的情况
-
创建一个固定大小的 goroutine 池,将任务分发给池中的 goroutine 并等待它们完成,使用带缓冲的通道来接收任务,以避免阻塞主线程
示例
有生产需求,建议使用大佬写的 ants库 ,以下是模拟协程池的简单示例
假设,我们有固定数量(2个)工人执行批量(4个)任务
package mainimport ("fmt""sync")type Task struct {TaskFunc func() interface{}}type WorkerPool struct {Size intWg *sync.WaitGroupTasks chan TaskResults chan Result}type Result struct {ID intRes interface{}}func NewWorkerPool(workerNum, taskBufSize int) *WorkerPool {return &WorkerPool{Size: workerNum,Wg: &sync.WaitGroup{},Tasks: make(chan Task, taskBufSize),Results: make(chan Result, taskBufSize),}}func (w *WorkerPool) AddTask(task Task) {w.Tasks