Hugh's Blog

控制 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()
}

参考

控制 goroutine 的并发数量

控制 Goroutine 的并发数量的方式