go协程池

package main

import (
"fmt"
"sync"
"time"
)

type Task struct {
ID int
Run func() error
}

type Pool struct {
taskChan chan Task
workerNum int
wg sync.WaitGroup
}

func main() {
// 创建协程池,3个worker,任务队列容量10
pool := NewPool(3, 10)
pool.Start()

// 投递10个任务
for i := 0; i < 10; i++ {
	taskID := i
	task := Task{
		ID: taskID,
		Run: func() error {
			fmt.Printf("任务%d开始执行\n", taskID)
			time.Sleep(time.Second) // 模拟耗时操作
			fmt.Printf("任务%d执行完成\n", taskID)
			return nil
		},
	}
	pool.AddTask(task)
}

// 等待所有任务完成
pool.Wait()
fmt.Println("所有任务执行完毕")

}

func NewPool(workerNum, taskCapacity int) *Pool {
return &Pool{
taskChan: make(chan Task, taskCapacity),
workerNum: workerNum,
}
}

func (p *Pool) Start() {
for i := 0; i < p.workerNum; i++ {
go p.worker()
}
}

func (p *Pool) worker() {
for task := range p.taskChan {
task.Run()
p.wg.Done()
}
}

func (p *Pool) AddTask(task Task) {
p.wg.Add(1)
p.taskChan <- task
}

func (p *Pool) Wait() {
close(p.taskChan)
p.wg.Wait()
}

posted on 2025-07-15 14:37  木林coder  阅读(5)  评论(0)    收藏  举报

导航