控制协程(goroutine)的并发数量

ants

https://github.com/panjf2000/ants/blob/master/README_ZH.md

利用 channel 的缓存区 可以利用信道 channel 的缓冲区大小来实现:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
// main_chan.go
func main() {
    var wg sync.WaitGroup
    ch := make(chan struct{}, 3)
    for i := 0; i < 10; i++ {
        ch <- struct{}{}
        wg.Add(1)
        go func(i int) {
            defer wg.Done()
            log.Println(i)
            time.Sleep(time.Second)
            <-ch
        }(i)
    }
    wg.Wait()
}

https://geektutu.com/post/hpg-concurrency-control.html