Heim >Backend-Entwicklung >Golang >Wie kann ich die Anzahl der aktiven Goroutinen in meinem Go-Programm genau zählen und anzeigen?

Wie kann ich die Anzahl der aktiven Goroutinen in meinem Go-Programm genau zählen und anzeigen?

Barbara Streisand
Barbara StreisandOriginal
2024-12-05 12:42:11971Durchsuche

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

Anzahl der aktiven Goroutinen zählen und anzeigen

Sie haben eine Funktion erstellt, die Elemente aus einer Warteschlange entfernt und in die Warteschlange einreiht und so sicherstellt, dass die richtige Anzahl von Goroutinen ausgeführt wird die Warteschlange, solange sie Elemente enthält. Sie wünschen sich jedoch eine Methode, um die Anzahl der derzeit aktiven Goroutinen anzuzeigen.

runtime.NumGoroutine Usage

Während die runtime.NumGoroutine-Funktion die Anzahl der laufenden Goroutinen bereitstellen kann In Ihrem Programm ist es wichtig, das Problem anders anzugehen. Dies liegt daran, dass Ihre Schleifen aufgrund der verschachtelten Schleife ständig Goroutinen erzeugen und CPU-Zyklen verschwenden.

Alternativer Ansatz: Sync.WaitGroup

Eine effektivere Lösung ist die Verwendung sync.WaitGroup. Indem Sie den Code wie folgt ändern:

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
}

In diesem überarbeiteten Code:

  • deen() verwendet jetzt eine sync.WaitGroup, um zu signalisieren, wann die Verarbeitung eines Elements abgeschlossen ist.
  • main() startet vier Goroutinen und wartet auf deren Abschluss.
  • Wg.Add() und wg.Done() Aufrufe stellen sicher, dass main() auf den Abschluss aller Goroutinen wartet, bevor fortgefahren wird.

Das obige ist der detaillierte Inhalt vonWie kann ich die Anzahl der aktiven Goroutinen in meinem Go-Programm genau zählen und anzeigen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn