Diskrepanzen zwischen Go Playground und Go on Your Machine: Goroutine-Ausführung
Um Verwirrung bezüglich der Goroutine-Ausführung zu beseitigen, wurde auf beiden ein Codeausschnitt ausgeführt der Go Playground und ein lokaler Automat. Der Playground erzeugte die Fehlermeldung „Der Prozess hat zu lange gedauert“, was auf die Erstellung einer ständig laufenden Goroutine hindeutet, während der lokale Computer zu einer fast sofortigen Ausgabe führte. Dies wirft die Frage auf, ob die Goroutine innerhalb der other()-Funktion beendet wird, wenn die Haupt-Goroutine beendet ist, oder im Hintergrund weiterläuft.
Erklärung
On the Go Playground , GOMAXPROCS ist auf 1 gesetzt. Dies zeigt an, dass jeweils nur eine Goroutine ausgeführt wird. Ohne Blockierung wechselt der Scheduler nicht zu anderen Goroutinen.
Im Code startet die Haupt-Goroutine und blockiert den Kanal „Fertig“. Der Scheduler muss zur other()-Goroutine wechseln, die einen Wert auf dem Done-Kanal sendet, wodurch beide Goroutinen lauffähig werden. Der Scheduler entscheidet sich dafür, mit der Ausführung von other() fortzufahren. Da GOMAXPROCS 1 ist, bleibt die Haupt-Goroutine blockiert.
other() startet dann eine Endlosschleife-Goroutine. Diese Goroutine läuft weiter und verhindert so, dass die Haupt-Goroutine wieder aufgenommen wird. Folglich kommt es zum Timeout des Playgrounds.
Lokal überschreitet GOMAXPROCS typischerweise 1. Während die Endlosschleifen-Goroutine läuft, wird daher gleichzeitig eine andere Goroutine (wahrscheinlich die Haupt-Goroutine) ausgeführt. Wenn die Haupt-Goroutine zurückkehrt, wird das Programm beendet, da es nicht auf den Abschluss anderer Nicht-Haupt-Goroutinen wartet.
Go Playground Modification
Durch explizites Setzen von GOMAXPROCS auf 1 auf dem Go Playground ist es möglich, das Verhalten „Der Vorgang hat zu lange gedauert“ zu reproduzieren. Umgekehrt führt die Einstellung von GOMAXPROCS auf einen höheren Wert, z. B. 2, häufig zu einer anderen Ausführungsreihenfolge und einer erfolgreichen Beendigung ohne Zeitüberschreitung.
Das obige ist der detaillierte Inhalt vonWarum tritt beim Go Playground eine Zeitüberschreitung auf, wenn derselbe Code auf einem lokalen Computer ausgeführt wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!