您已經建立了一個函數,用於將元素從隊列中出隊和入隊,確保正確數量的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 }
在此修改後的程式碼中:
以上是如何準確統計並顯示我的Go程式中活躍的goroutine數量?的詳細內容。更多資訊請關注PHP中文網其他相關文章!