限制並發Goroutine 執行
考慮一個場景,您有一個要處理的URL 列表,並且想要限制運行的並發Goroutine 的數量。例如,如果你有 30 個 URL,你可能只需要 10 個 goroutine 並行工作。
提供的程式碼嘗試使用大小為 parallel 的緩衝通道來限制運行的 goroutine 數量。然而,這種方法在處理完所有 URL 後似乎並沒有阻塞。實現這種並發限制的更有效方法是建立指定數量的工作 goroutine 並透過專用通道向它們提供 URL。
這是程式碼的改進版本:
parallel := flag.Int("parallel", 10, "max parallel requests allowed")
flag.Parse()
urls := flag.Args()
// Create a channel to hold URLs that workers will consume
workerURLChan := make(chan string)
// Start a goroutine to feed URLs to the workers
go func() {
for _, u := range flag.Args() {
workerURLChan 在此更新的程式碼中,我們為每個允許的並發執行建立一個工作協程,這些工作協程從專用通道取得 URL。一旦所有 URL 都已分發,workerURLChan 就會關閉,這會在當前 URL 完成時觸發工作人員退出。這種機制有效地限制了並發運行的goroutines的數量。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3