产生了100个协程,控制并发数为10,可以看到用时10098ms

package main
import (
"fmt"
"sync"
"time"
)
// channel + WaitGroup实现控制并发数量
var maxConcurrentNum = 10
var chData = make(chan int, maxConcurrentNum)
var wg sync.WaitGroup
var taskNum = 100
func main() {
start_time := time.Now().UnixMilli()
for i := 0; i < taskNum; i++ {
chData <- 1
go doTask(i)
}
wg.Wait()
close(chData)
fmt.Println("Main over")
end_time := time.Now().UnixMilli()
fmt.Printf("Duration: %vms", end_time-start_time)
}
func doTask(taskID int) {
wg.Add(1)
time.Sleep(time.Millisecond * 1000)
fmt.Println("Finish task ", taskID)
<-chData
wg.Done()
}
调整并发数为50时,用时2032ms
