Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Memantau dan Mengawal Bilangan Goroutine Aktif dalam Go dengan Berkesan?
Dalam senario di mana anda mempunyai baris gilir dengan operasi serentak, adalah penting untuk memantau bilangan goroutin aktif. Ini memastikan bilangan goroutin yang sesuai mengendalikan baris gilir, mengoptimumkan prestasi dan penggunaan sumber.
Coretan kod yang disediakan menunjukkan gelung yang menghasilkan goroutin berdasarkan bilangan elemen dalam baris gilir. Walau bagaimanapun, pendekatan ini mempunyai beberapa kelemahan:
Penyelesaian yang lebih baik ialah menggunakan mekanisme penyegerakan. Di sini, WaitGroup digunakan:
func deen(wg *sync.WaitGroup, queue chan int) { for element := range queue { wg.Done() 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) } } } 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 }
Kod yang disemak ini memastikan bilangan goroutin sentiasa dihadkan kepada empat dan ia menyelesaikan pemprosesan sebaik sahaja semua elemen dalam baris gilir dikendalikan. Pendekatan ini berkesan menangani masalah penciptaan goroutine yang berlebihan dan penggunaan CPU.
Atas ialah kandungan terperinci Bagaimana untuk Memantau dan Mengawal Bilangan Goroutine Aktif dalam Go dengan Berkesan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!