Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Mengira dan Memaparkan Bilangan Goroutine Aktif dalam Program My Go dengan Tepat?

Bagaimanakah Saya Boleh Mengira dan Memaparkan Bilangan Goroutine Aktif dalam Program My Go dengan Tepat?

Barbara Streisand
Barbara Streisandasal
2024-12-05 12:42:11971semak imbas

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

Kira dan Paparkan Bilangan Goroutine Aktif

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:

  • deen() kini menggunakan penyegerakan.WaitGroup untuk memberi isyarat apabila ia telah selesai memproses elemen.
  • main() memulakan empat goroutine dan menunggunya selesai.
  • The Panggilan wg.Add() dan wg.Done() memastikan main() menunggu semua goroutine selesai sebelum meneruskan.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn