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
}
相关推荐
小王C语言3 分钟前
【基础IO】————简单设计一下libc库
前端·数据结构·算法
亦复何言??4 分钟前
BeyondMimic 论文解析
人工智能·算法·机器人
WolfGang0073218 分钟前
代码随想录算法训练营 Day20 | 回溯算法 part02
算法
YXXY31311 分钟前
前缀和算法
算法
客卿12311 分钟前
滑动窗口--模板
java·算法
xiaoye-duck19 分钟前
【C++:unordered_set和unordered_map】 深度解析:使用、差异、性能与场景选择
开发语言·c++·stl
_日拱一卒29 分钟前
LeetCode:滑动窗口的最大值
数据结构·算法·leetcode
codeの诱惑39 分钟前
推荐算法(一):数学基础回顾——勾股定理与欧氏距离
算法·机器学习·推荐算法
落樱弥城40 分钟前
Vulkan Compute 详解
算法·ai·图形学
老约家的可汗40 分钟前
list 容器详解:基本介绍与常见使用
c语言·数据结构·c++·list