go并发4 pools 协程池代码

本文深入探讨Go语言中的并发特性,通过分析`pools`包下的`pool.go`文件,详细解释如何创建和使用协程池,以提升程序执行效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pools包下
pool.go

package pools

import (
	"tools/reptilesoper/reptilesengine/gogo/timerupdate"
)

type GoPools struct {
	PoolName             string                      //协程池名称
	GoWorkNum            int                         //协程工作的数量  通过调度层哪边根据任务情况 来安排协程池这边的工作数量
	ExternalChannel      chan *timerupdate.Task      //EC 对外【接收】通道
	//map['Instruction']=stopticker Instruction 代表指令 具体做什么功能
	//map['Data']=result 返回的具体数据
	ExternalTransChannel chan interface{} //ETC 对外【发送】通道
	JobsChannel          chan *timerupdate.Task      //JC 内部工作通道
}

//创建一个协程池
func CreatePools(poolName string, goNum int) *GoPools {
	gp := &GoPools{
		PoolName:             poolName,
		GoWorkNum:            goNum,
		ExternalChannel:      make(chan *timerupdate.Task),
		JobsChannel:          make(chan *timerupdate.Task),
		ExternalTransChannel: make(chan  interface{} ),
	}

	return gp
}

// 独立工作单元
func (gp *GoPools) Worker() {
	//对内工作通道
	for worker := range gp.JobsChannel {
		result := worker.ExcuTask()
		//检测到工作任务完成之后不为nil 就协定为有向外部DW通道发送 信号给 中心调度器
		if result != nil {
			gp.ExternalTransChannel <- result
		}

	}

}
func (gp *GoPools) Run() {

	for i := 1; i <= int(gp.GoWorkNum); i++ {

		go gp.Worker()
	}

	for t := range gp.ExternalChannel {
		gp.JobsChannel <- t
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值