使用 channel 控制并发数

package main

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

func main() {
	ch := make(chan int, runtime.NumCPU())  // 定义一个有缓冲的channel
	wg := sync.WaitGroup{}

	for i := 1; i < 10; i++ {
		ch <- 1
		wg.Add(1)
		go func(index int) {
			defer wg.Done()
			defer func() { <-ch }()

			time.Sleep(1 * time.Second)
			fmt.Printf("do work %d\n", index)
		}(i)
	}
	wg.Wait()
	fmt.Println("COMPLETE")
}
posted @ 2021-11-03 21:27  搬砖__码农  阅读(95)  评论(0)    收藏  举报