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
}
相关推荐
idontknow2332 分钟前
从零开始编写 webserver (三) 线程池与数据库连接池
c++
雪花desu2 分钟前
【Hot100-Java中等】:字母异位词分组
java·算法·leetcode·哈希表
Word码3 分钟前
LeetCode283. 移动零(双指针精讲)
算法·leetcode·职场和发展
xiaoxue..6 分钟前
二叉搜索树 BST 三板斧:查、插、删的底层逻辑
javascript·数据结构·算法·面试
蒙奇D索大7 分钟前
【数据结构】排序算法精讲 | 快速排序全解:分治思想、核心步骤与示例演示
数据结构·笔记·学习·考研·算法·排序算法·改行学it
石去皿9 分钟前
C++校招通关秘籍:从高频考点到工程思维的跃迁
java·服务器·c++
YGGP10 分钟前
【Golang】LeetCode 55. 跳跃游戏
算法·leetcode
挖矿大亨11 分钟前
C++中的递增运算符重载
开发语言·c++
草莓熊Lotso1 小时前
Linux 实战:从零实现动态进度条(含缓冲区原理与多版本优化)
linux·运维·服务器·c++·人工智能·centos·进度条
行稳方能走远2 小时前
Android C++ 学习笔记3
android·c++