我正在運行一個回圈 - 24 次呼叫下游,該下游無法處理由回圈產生的 24 個 go-routines 同時提供的所有作業我想限制只有一個特定的數字(如 3 或 4)go-例程將同時運行,但所有 24 個任務都需要關閉
示例代碼如下所示,如果有人能指出正確的模式來實作這將是一個很大的幫助
for i:=0; i<24; i {
go callSomeDownStream()
}
uj5u.com熱心網友回復:
您可以使用空結構的通道來控制并發作業者 goroutine 的數量
const MAX_CONCURRENT_JOBS = 3
func main() {
waitChan := make(chan struct{}, MAX_CONCURRENT_JOBS)
for i:=0; i < 24; i {
waitChan <- struct{}{}
go func() {
callSomeDownStream()
<-waitChan
}()
}
}
uj5u.com熱心網友回復:
func callSomeDownStream(wg *sync.WaitGroup, queue chan struct{}) {
defer func() {
<-queue
wg.Done()
}()
// do something
}
func main() {
wg := sync.WaitGroup{}
queue := make(chan struct{}, 3)
for i := 0; i < 24; i {
queue <- struct{}{}
wg.Add(1)
go callSomeDownStream(&wg, queue)
}
wg.Wait()
close(queue)
}
uj5u.com熱心網友回復:
我認為這聽起來像是worker-pools我們想要限制并發作業數量時的概念:https ://gobyexample.com/worker-pools
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/511997.html
標籤:去并发协程
下一篇:SQL抽象語法樹及改寫場景應用
