控制 Goroutine 的并发数量
在 Go 中创建协程的成本很低,为了避免造成资源的浪费,有必要限制协程的数量,下面是一个简单的实现。
package main
import (
"fmt"
"sync"
"time"
)
var wg = sync.WaitGroup{}
var jobs = make(chan int, 2)
func main() {
// 设置 goroutine 消费者数量
for i := 0; i < 5; i++ {
go func() {
for j := range jobs {
fmt.Println("Doing ", j)
time.Sleep(time.Second)
fmt.Println("Done ", j)
wg.Done()
}
}()
}
// 推送任务
for i := 0; i < 20; i++ {
jobs <- i
wg.Add(1)
fmt.Println("Add ", i)
}
wg.Wait()
}