Beim Ausführen eines Codes auf dem Go Playground können Entwickler auf Diskrepanzen im Vergleich zur Ausführung desselben Codes auf ihren lokalen Computern stoßen. In diesem Artikel werden die Verhaltensunterschiede untersucht, insbesondere beim Umgang mit Goroutinen und Synchronisierungsmechanismen.
Betrachten Sie den folgenden Go-Code:
<code class="go">package main import ( "fmt" ) func other(done chan bool) { done <- true go func() { for { fmt.Println("Here") } }() } func main() { fmt.Println("Hello, playground") done := make(chan bool) go other(done) <-done fmt.Println("Finished.") }
Auf dem Go-Playground erzeugt dieser Code einen Fehler: „Der Vorgang hat zu lange gedauert.“ Dies deutet darauf hin, dass die in der anderen Funktion erstellte Goroutine unbegrenzt läuft.
Die Ausführung desselben Codes auf einem lokalen Computer mit mehreren CPU-Kernen (GOMAXPROCS > 1) führt jedoch zu der folgenden Ausgabe:
<code class="text">Hello, playground Finished.</code>
Dies impliziert, dass die in anderen erstellte Goroutine beendet wird, wenn die Haupt-Goroutine beendet wird.
Das unterschiedliche Verhalten zwischen dem Go-Playground und der lokalen Maschine kann darauf zurückgeführt werden Anzahl der verfügbaren Prozessoren. Auf dem Go-Playground ist GOMAXPROCS standardmäßig auf 1 eingestellt, was bedeutet, dass jeweils nur eine einzige Goroutine ausgeführt werden kann. Daher verhindert im obigen Beispiel die endlose Goroutine, die in other erstellt wurde, die Fortsetzung der Haupt-Goroutine.
Im Gegensatz dazu verwendet GOMAXPROCS bei lokaler Ausführung mit mehreren CPU-Kernen standardmäßig die Anzahl der verfügbaren Kerne, sodass mehrere Goroutinen ausgeführt werden können gleichzeitig laufen. Somit blockiert die in anderen erstellte endlose Goroutine nicht das Beenden der Haupt-Goroutine.
Das Verhalten von Goroutinen in Go hängt von der Anzahl der verfügbaren Prozessoren (GOMAXPROCS) ab. Während der Go-Playground einen Standardwert von 1 verwendet, was dazu führen kann, dass Goroutinen auf unbestimmte Zeit laufen, führt die Ausführung desselben Codes auf einem lokalen Computer mit mehreren Kernen zu einem anderen Verhalten, bei dem Goroutinen möglicherweise beendet werden, wenn die Haupt-Goroutine beendet ist. Dieses Verständnis hilft Entwicklern, Missverständnisse zu vermeiden und stellt sicher, dass sich ihr Code in verschiedenen Umgebungen wie erwartet verhält.
Das obige ist der detaillierte Inhalt vonWarum weisen Goroutinen auf Go-Spielplätzen und lokalen Maschinen Verhaltensunterschiede auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!