通过channel实现,新起协程时,先往channel写入数据,协程执行完毕,从channel读出数据。
func main() {
gCnt := 1000 //协程数量
c := make(chan struct{}, gCnt)
for i := 0; i < 2000; i++ {
c <- struct{}{}
go func() {
defer func() {
<-c
}()
fmt.Println("abc")
}()
}
}