Goroutine-Ausführung verstehen: Warum meine Goroutine im Leerlauf blieb
In Ihrem Go-Code wollten Sie mit Goroutinen und Kanälen experimentieren. Das Ziel bestand darin, eine Goroutine zu erstellen, die kontinuierlich von einem Kanal liest, aber die erwartete Meldung „Betritt die Goroutine ...“ erschien nie. In diesem Artikel werden die Gründe für dieses Verhalten untersucht.
Der von Ihnen bereitgestellte Code enthält eine Goroutine, die wie folgt erstellt wurde:
go func(m *chan string) { fmt.Println("Entering the goroutine...") for { fmt.Println(<- *m) } }(&messages)
Obwohl die Goroutine gestartet wird, wird sie schnell beendet, da das Hauptprogramm sofort beendet wird nach dem Drucken von „Fertig!“. Goroutinen werden gleichzeitig mit dem Hauptprogramm ausgeführt; Sie werden jedoch beendet, wenn das Hauptprogramm beendet wird.
Um zu verhindern, dass die Goroutine vorzeitig beendet wird, müssen Sie eine Möglichkeit finden, das Hauptprogramm am Laufen zu halten, während die Goroutine ausgeführt wird. Dies kann erreicht werden, indem ein separater Kanal verwendet wird, der auf eine bestimmte Anzahl von Nachrichten wartet, eine sync.WaitGroup verwendet wird oder andere Techniken implementiert werden.
Der Go-Blog bietet einen ausführlichen Leitfaden zur Parallelität (https://blog .golang.org/go-proverbs), das wertvolle Einblicke in die Funktionsweise der Parallelität in Go bietet.
Das obige ist der detaillierte Inhalt vonWarum bleibt meine Goroutine im Leerlauf, wenn das Hauptprogramm beendet wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!