首頁 > 後端開發 > Golang > 如何準確統計並顯示我的Go程式中活躍的goroutine數量?

如何準確統計並顯示我的Go程式中活躍的goroutine數量?

Barbara Streisand
發布: 2024-12-05 12:42:11
原創
977 人瀏覽過

How Can I Accurately Count and Display the Number of Active Goroutines in My Go Program?

計算並顯示活動Goroutines 的數量

您已經建立了一個函數,用於將元素從隊列中出隊和入隊,確保正確數量的Goroutine運行只要隊列包含元素即可。但是,您希望有一個方法來顯示目前活動的 Goroutine 的數量。

runtime.NumGoroutine 用法

而runtime.NumGoroutine 函數可以提供正在運行的Goroutine 的數量在您的程式中,以不同的方式處理問題至關重要。這是因為你的循環會因為嵌套循環而不斷產生 goroutine 並浪費 CPU 週期。

替代方法:Sync.WaitGroup

更有效的解決方案是利用同步.WaitGroup。透過以下修改程式碼:

func deen(wg *sync.WaitGroup, queue chan int) {
    for element := range queue {
        fmt.Println("element is ", element)
        if element%2 == 0 {
            fmt.Println("new element is ", element)
            wg.Add(2)
            queue <- (element * 100 + 11)
            queue <- (element * 100 + 33)
        }
        wg.Done()
    }
}

func main() {
    var wg sync.WaitGroup
    queue := make(chan int, 10)
    queue <- 1
    queue <- 2
    queue <- 3
    queue <- 0
    for i := 0; i < 4; i++ {
        wg.Add(1)
        go deen(&wg, queue)
    }
    wg.Wait()
    close(queue)
    fmt.Println("list len", len(queue)) // this must be 0
}
登入後複製

在此修改後的程式碼中:

  • deen() 現在使用sync.WaitGroup 在完成處理元素時發出訊號。
  • main() 啟動四個 goroutine 並等待它們完成。
  • wg.Add() 和 wg.Done() 呼叫確保 main() 等待所有 goroutine 完成後再繼續。

以上是如何準確統計並顯示我的Go程式中活躍的goroutine數量?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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