Golang协程池的实现与应用(go语言协程池)太疯狂了

随心笔谈2年前发布 编辑
146 0
🌐 经济型:买域名、轻量云服务器、用途:游戏 网站等 《腾讯云》特点:特价机便宜 适合初学者用 点我优惠购买
🚀 拓展型:买域名、轻量云服务器、用途:游戏 网站等 《阿里云》特点:中档服务器便宜 域名备案事多 点我优惠购买
🛡️ 稳定型:买域名、轻量云服务器、用途:游戏 网站等 《西部数码》 特点:比上两家略贵但是稳定性超好事也少 点我优惠购买

// 定义一个协程池
type Pool struct {
// 对外的Task入口
EntryChannel chan *Task
// 对内的Task队列
JobsChannel chan *Task
// 协程池的最大work数量
WorkerNum int
}
// NewPool 创建Pool的函数
func NewPool(cap int) *Pool{
return &Pool{
EntryChannel: make(chan *Task),
JobsChannel: make(chan *Task),
WorkerNum: cap,
}
}
// 协程池创建一个Worker
func (p *Pool)worker(workID int){
for task:=range p.JobsChannel{
task.Execute() //取到任务就执行
fmt.Println(“worker_id 为”,workID)
}
}
// 让协程池开始真正的工作
func (p *Pool)run() {
// 根据创建协程池的大小来创建协程工作
for i :=0; i < p.WorkerNum; i++ {
go p.worker(i+1)
}
// 不断遍历外部的任务然后丢入到内部的队列去运行
for task :=range p.EntryChannel {
p.JobsChannel<-task
}
}

© 版权声明

相关文章