Go語(yǔ)言控制并發(fā)數(shù)量的方法有以下幾種:
ch := make(chan struct{}, maxConcurrency)
for i := 0; i < totalTasks; i++ {
ch <- struct{}{} // 占用一個(gè)channel的緩沖區(qū)
go func() {
defer func() { <-ch }() // 釋放一個(gè)channel的緩沖區(qū)
// 執(zhí)行并發(fā)任務(wù)
}()
}
var wg sync.WaitGroup
for i := 0; i < totalTasks; i++ {
wg.Add(1)
go func() {
defer wg.Done()
// 執(zhí)行并發(fā)任務(wù)
}()
}
wg.Wait()
pool := make(chan struct{}, maxGoroutines)
for i := 0; i < maxGoroutines; i++ {
pool <- struct{}{} // 占用一個(gè)goroutine
go func() {
defer func() { <-pool }() // 釋放一個(gè)goroutine
// 執(zhí)行并發(fā)任務(wù)
}()
}
以上方法都可以用來(lái)控制并發(fā)數(shù)量,根據(jù)實(shí)際場(chǎng)景選擇合適的方法。