首頁 > 後端開發 > Golang > Go 中如何保持同時運行的 Goroutine 數量恆定?

Go 中如何保持同時運行的 Goroutine 數量恆定?

Patricia Arquette
發布: 2024-12-02 00:49:14
原創
915 人瀏覽過

How to Maintain a Constant Number of Simultaneously Running Goroutines in Go?

Go 中的線程 Goroutine:同時運行恆定數量

Go 並發領域提供了大量關於等待指定數量的 Goroutine 完成的材料。然而,一個明顯的挑戰出現了:確保連續執行預定義數量的 goroutine,一個開始另一個結束。

考慮一個具有大量任務的場景,例如處理從 MySQL 檢索的資料資料庫。一種簡單的方法可能會啟動大量並行 goroutine,同時執行數十萬個任務。相反,所需的行為將並發運行的 goroutine 限制為固定數量(例如 20)。

這種受控並行模式稱為「有界並行性」。在 Go 中實現這種模式需要使用一個空結構通道作為訊號量,指示並發工作協程的最大數量。這是一個例子:

package main

import "fmt"

func main() {
    maxGoroutines := 10
    guard := make(chan struct{}, maxGoroutines)

    for i := 0; i < 30; i++ {
        guard <- struct{}{} // blocks if guard channel is full
        go func(n int) {
            worker(n)
            <-guard // unlocks a slot in guard
        }(i)
    }
}

func worker(i int) { fmt.Println("doing work on", i) }
登入後複製

這個實作確保並發執行的 goroutine 數量不會超過指定數量。結果,當一個worker goroutine完成時,一個新的goroutine會立即啟動,從而維持所需的並發等級。

「Go並發模式」文章在「有限並行性」部分進一步探討了這個概念,提供了更深入的了解深入了解這一關鍵的並發技術。

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板