首頁 >後端開發 >Golang >Go 中如何保持並發 Goroutine 數量恆定?

Go 中如何保持並發 Goroutine 數量恆定?

Patricia Arquette
Patricia Arquette原創
2024-12-02 01:22:15570瀏覽

How to Maintain a Constant Number of Concurrent Goroutines in Go?

如何保證 Goroutine 數量恆定

Go 中的並發程式設計涉及建立多個 Goroutine(輕量級執行緒)來並發執行任務。雖然管理 goroutine 的完成情況很常見,但當您需要保證同時運行特定數量的 goroutine 時,就會出現不同的挑戰。

考慮這樣一個場景,您有大量任務需要處理並且想要限制任何給定時間的活動 goroutine 數量。例如,您可能有一個處理傳入請求的進程,並希望限制並發請求的數量以保持系統穩定性。

為了實現這一點,我們可以採用「有限並行性」技術,如中所述。 Go 並發模式文章。關鍵思想是使用空結構體通道作為限制守衛來控制工作協程的數量。

在提供的程式碼片段中,守衛通道的初始化容量等於最大協程數量我們希望同時運作(在本例中為 10)。為了確保這個限制,任何新的 goroutine 創建都會首先嘗試從保護通道接收一個空結構。如果通道已滿(表示已達到 goroutine 限制),則建立將被阻止,直到有可用的插槽為止。

當每個 goroutine 完成其工作時,它會將空結構返回給保護通道,使其成為可用的。可供另一個 goroutine 啟動。透過這種機制,我們確保活動 Goroutine 的數量保持在指定的範圍內。

範例中:

  • maxGoroutines 變數定義了並發 Goroutine 的最大數量。
  • 保護通道初始化容量為10,這限制了可以保護的goroutines的最大數量
  • worker 函數代表每個 goroutine 執行的單一任務。
  • main 函數建立了 30 個 goroutine,但由於保護通道的限制,只有 10 個可以同時執行。

以上是Go 中如何保持並發 Goroutine 數量恆定?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn