go并发模式之----工作池/协程池模式
常见���式之四:工作池/协程池模式
定义
顾名思义,就是有固定数量的工人(协程),去执行批量的任务
使用场景
-
适用于需要限制并发执行任务数量的情况
-
创建一个固定大小的 goroutine 池,将任务分发给池中的 goroutine 并等待它们完成,使用带缓冲的通道来接收任务,以避免阻塞主线程
示例
有生产需求,建议使用大佬写的 ants库 ,以下是模拟协程池的简单示例
假设,我们有固定数量(2个)工人执行批量(4个)任务
package main import ( "fmt" "sync" ) type Task struct { TaskFunc func() interface{} } type WorkerPool struct { Size int Wg *sync.WaitGroup Tasks chan Task Results chan Result } type Result struct { ID int Res 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
The End