近期在学习Go语言,自己实现了一个很简单的协程池,记录一下实现过程
总体架构
可以看到,架构很简单,就是客户通过Channel
传一些任务给协程池,然后协程池里的worker
就会执行
Task结构体
type Task struct {
taskId int
f func() error
}
Task结构体很简单,一个id
,一个要执行的函数
// Task的构造函数
func NewTask(id int, f func() error) *Task {
return &Task{
taskId: id,
f: f,
}
}
// 执行task
func (t *Task) execute() {
t.f()
}
协程池结构体
type Pool struct {
workerNum int
EntryChan chan *Task
workerChan chan *Task
}
协程池结构体也很简单
workerNum
:worker的数量,由客户指定EntryChan
:提供给客户传任务的一个通道workerChan
:协程池内部传给worker的一个通道
初始化协程池
func NewPool(num int) *Pool {
return &Pool{
workerNum: num,
EntryChan: make