首頁 > 後端開發 > Golang > Go中如何控制並發Goroutine的數量?

Go中如何控制並發Goroutine的數量?

Mary-Kate Olsen
發布: 2024-12-27 21:46:11
原創
635 人瀏覽過

How Can I Control the Number of Concurrent Goroutines in Go?

控制併發 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中文網其他相關文章!

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