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
}

相关推荐

  1. go线执行任务

    2024-04-20 18:22:02       18 阅读
  2. python线提交任务

    2024-04-20 18:22:02       39 阅读
  3. 40.任务调度线

    2024-04-20 18:22:02       8 阅读
  4. 线执行流程

    2024-04-20 18:22:02       36 阅读
  5. Go 线实现案例

    2024-04-20 18:22:02       26 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-20 18:22:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-20 18:22:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-20 18:22:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-20 18:22:02       18 阅读

热门阅读

  1. 20204现在还可以下载游戏的地方有哪些?

    2024-04-20 18:22:02       14 阅读
  2. 计算方法实验5:C++实现矩阵的奇异值分解

    2024-04-20 18:22:02       12 阅读
  3. Unity的ScriptableObject

    2024-04-20 18:22:02       15 阅读
  4. flink1.18.0 流转表 表转流 jdk17 attachAsDataStream

    2024-04-20 18:22:02       16 阅读
  5. 5G网络建设--并查集--最小生成树

    2024-04-20 18:22:02       19 阅读
  6. 总结批量创建文件夹及文件重命名、移动的方法

    2024-04-20 18:22:02       12 阅读
  7. datalist 是什么?以及作用是什么?

    2024-04-20 18:22:02       18 阅读
  8. 实体类List重复校验

    2024-04-20 18:22:02       15 阅读