如何保證 Goroutine 數量恆定
Go 中的並發程式設計涉及建立多個 Goroutine(輕量級執行緒)來並發執行任務。雖然管理 goroutine 的完成情況很常見,但當您需要保證同時運行特定數量的 goroutine 時,就會出現不同的挑戰。
考慮這樣一個場景,您有大量任務需要處理並且想要限制任何給定時間的活動 goroutine 數量。例如,您可能有一個處理傳入請求的進程,並希望限制並發請求的數量以保持系統穩定性。
為了實現這一點,我們可以採用「有限並行性」技術,如中所述。 Go 並發模式文章。關鍵思想是使用空結構體通道作為限制守衛來控制工作協程的數量。
在提供的程式碼片段中,守衛通道的初始化容量等於最大協程數量我們希望同時運作(在本例中為 10)。為了確保這個限制,任何新的 goroutine 創建都會首先嘗試從保護通道接收一個空結構。如果通道已滿(表示已達到 goroutine 限制),則建立將被阻止,直到有可用的插槽為止。
當每個 goroutine 完成其工作時,它會將空結構返回給保護通道,使其成為可用的。可供另一個 goroutine 啟動。透過這種機制,我們確保活動 Goroutine 的數量保持在指定的範圍內。
範例中:
以上是Go 中如何保持並發 Goroutine 數量恆定?的詳細內容。更多資訊請關注PHP中文網其他相關文章!