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
}
相关推荐
无畏烧风5 分钟前
[C++] 一个线程打印奇数一个线程打印偶数
c++
I AM_SUN8 分钟前
994. 腐烂的橘子
数据结构·c++·算法·leetcode·职场和发展
DARLING Zero two♡22 分钟前
C++色彩博弈的史诗:红黑树
c++·红黑树
Go Dgg26 分钟前
Go语言实现豆瓣电影Top250爬虫
开发语言·爬虫·golang
真的想上岸啊27 分钟前
c语言第一个小游戏:贪吃蛇小游戏03
c语言·开发语言·算法
龙湾开发39 分钟前
计算机图形学编程(使用OpenGL和C++)(第2版)学习笔记 09.天空和背景
c++·笔记·学习·3d·图形渲染
kyle~1 小时前
C++匿名函数
开发语言·c++·人工智能
李匠20241 小时前
C++GO语言微服务之Dockerfile && docker-compose
c++·docker·微服务·架构
code bean1 小时前
【Qt/C++】深入理解 Lambda 表达式与 `mutable` 关键字的使用
开发语言·c++·qt
Cuit小唐1 小时前
C++ 模板方法模式详解
java·c++·模板方法模式