go自建线程池执行任务

今天来和大家探讨一下关于协成池,大家在工作用使用go开发工作避免不了使用到go中的协成,使用协成的一个特点就是很难控制,今天小码自己使用go语言自创了一个go的协成池,有不同看法的可以评论在下方大家一起进步呦

go 复制代码
func TestExecute(t *testing.T) {
	pool := NewRoutinePool(5)
	for i := 0; i < 100; i++ {
		task := i
		pool.AddTask(func() {
			fmt.Printf("执行任务 %d \n", task)
			time.Sleep(time.Second * 3)
		})
	}
	pool.Wait()
	fmt.Println("任务执行完毕!")
}

type routinePool struct {
	wg        sync.WaitGroup
	taskQueue chan func()
}

func (pool *routinePool) worker() {
	for task := range pool.taskQueue {
		task()
		pool.wg.Done()
	}
}

func (pool *routinePool) AddTask(task func()) {
	pool.wg.Add(1)
	pool.taskQueue <- task
}

func (pool *routinePool) Wait() {
	pool.wg.Done()
}

func NewRoutinePool(goroutineNum int) *routinePool {
	pool := &routinePool{
		taskQueue: make(chan func(), goroutineNum),
	}

	for i := 0; i < goroutineNum; i++ {
		go pool.worker()
	}
	return pool
}
相关推荐
碧海银沙音频科技研究院33 分钟前
ES7243E ADC模拟音频转i2S到 BES I2S1 Master输出播放到SPK精准分析
人工智能·算法·音视频
Dobby_0534 分钟前
【Go】C++ 转 Go 第(四)天:结构体、接口、反射、标签 | 面向对象编程
vscode·golang·1024程序员节
百度智能云1 小时前
MySQL最怕的IN大列表,被百度智能云GaiaDB治好了!查询速度提升60倍!
算法
信奥卷王1 小时前
[GESP202506 五级] 奖品兑换
数据结构·算法
似水এ᭄往昔1 小时前
【C++】--list的使用和模拟实现
开发语言·c++
十五年专注C++开发1 小时前
qtmqtt: 一个开源且好用的mqtt开源客户端
c++·qt·mqtt·开源
奶茶树1 小时前
【数据结构】二叉搜索树
数据结构·算法
小苏兮1 小时前
【数据结构】二叉搜索树
开发语言·数据结构·c++·学习·1024程序员节
腾昵猫1 小时前
程序员的自我修养(三)
c++
晨曦(zxr_0102)2 小时前
CSP-X 2024 复赛编程题全解(B4104+B4105+B4106+B4107)
数据结构·c++·算法