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
}
相关推荐
CodeJourney.18 分钟前
Deepseek助力思维导图与流程图制作:高效出图新选择
数据库·人工智能·算法
Liudef0634 分钟前
Stable Diffusion模型高清算法模型类详解
人工智能·算法·ai作画·stable diffusion
一只小小汤圆1 小时前
c++ std::tuple用法
开发语言·c++
柠石榴1 小时前
【练习】【二叉树】力扣热题100 102. 二叉树的层序遍历
c++·算法·leetcode·二叉树
邴越1 小时前
Leetcode 112: 路径总和
算法·leetcode·职场和发展
2301_801037731 小时前
力扣-字符串
算法·leetcode·职场和发展
冠位观测者1 小时前
【Leetcode 每日一题】1328. 破坏回文串
数据结构·算法·leetcode
一只_程序媛1 小时前
【leetcode hot 100 53】最大子数组和
算法·leetcode·职场和发展
邴越1 小时前
Leetcode 57: 插入区间
算法·leetcode·职场和发展
越甲八千1 小时前
C++海康相机DEMO
开发语言·c++·数码相机