Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Mengira dan Memaparkan Bilangan Goroutine Aktif dalam Program My Go dengan Tepat?
Anda telah mencipta fungsi yang menyah gilir dan menghalakan elemen daripada baris gilir, memastikan bilangan goroutin yang betul beroperasi pada baris gilir selagi ia mengandungi elemen. Walau bagaimanapun, anda inginkan kaedah untuk memaparkan kiraan goroutin yang aktif pada masa ini.
masa jalan.Penggunaan NumGoroutine
Sementara fungsi masa jalan.NumGoroutine boleh menyediakan bilangan goroutine yang berjalan dalam program anda, adalah penting untuk mendekati isu ini secara berbeza. Ini kerana gelung anda akan terus menghasilkan goroutines dan membazirkan kitaran CPU disebabkan oleh gelung bersarang.
Pendekatan Alternatif: Sync.WaitGroup
Penyelesaian yang lebih berkesan adalah dengan menggunakan sync.WaitGroup. Dengan mengubah suai kod seperti berikut:
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 }
Dalam kod yang disemak ini:
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengira dan Memaparkan Bilangan Goroutine Aktif dalam Program My Go dengan Tepat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!