控制併發 Goroutine 的數量
同時執行多個 Goroutine 可以提高適當設計的程序的性能。然而,在某些場景下,有必要限制並發運行的 goroutine 數量。本文探討如何管理在任何給定時間執行的 goroutine 數量。
有界並行
「有界並行」模式,如 Go 並發中所述模式文章提供了限制並發 goroutine 數量的解決方案。此模式利用容量有限的通道來控制可以同時執行的 goroutine 數量。
範例實作
考慮以下範例,我們需要在其中維護最多10 個並發goroutine 來處理大量任務:
package main import "fmt" func main() { maxGoroutines := 10 guard := make(chan struct{}, maxGoroutines) // Capacity of the channel limits concurrent goroutines for i := 0; i < 30; i++ { guard <- struct{}{} // Blocking operation to prevent exceeding the limit go func(n int) { worker(n) <-guard // Release the guard when the worker completes }(i) } } func worker(i int) { fmt.Println("doing work on", i) }
在此實作中,保護通道充當限制因素。當併發 Goroutine 的數量達到通道的最大容量(10)時,保護通道將阻止新的 Goroutine 啟動。一旦正在運行的 Goroutine 完成,它就會透過從通道接收資料來釋放守衛,從而允許新的 Goroutine 執行。
結論
利用「有界並行」模式和有限容量的通道,可以控制並發 goroutine 的數量,確保始終保持所需的最大值。這種方法提供了一種結構化且有效的方法來管理 Go 程式中的平行性。
以上是Go中如何控制並發Goroutine的數量?的詳細內容。更多資訊請關注PHP中文網其他相關文章!