golang实现简单的woker工作池

Posted by Ethan Blog on September 17, 2020

使用golang实现简单的worker工作池。 指定worker数量,避免创建过多的Goroutine

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    var workerChan chan int = make(chan int ,4) //指定worker数量
    var wg = sync.WaitGroup{}
    func main() {
        //模拟10个任务
        for i:=1;i<=10;i++{
            wg.Add(1)
            workerChan<-i
            go exec(i)
        }
        wg.Wait()
        log.Println(`end`)
    }

    //执行任务
    func exec(i int){
        defer func() {
            <-workerChan
            wg.Done()
        }()
        time.Sleep(1*time.Second)
        log.Println(i)
    }