Heim > Backend-Entwicklung > Golang > Warum tritt beim Go Playground eine Zeitüberschreitung auf, wenn derselbe Code auf einem lokalen Computer ausgeführt wird?

Warum tritt beim Go Playground eine Zeitüberschreitung auf, wenn derselbe Code auf einem lokalen Computer ausgeführt wird?

Mary-Kate Olsen
Freigeben: 2024-10-23 23:25:29
Original
528 Leute haben es durchsucht

Why Does the Go Playground Timeout While Running the Same Code on a Local Machine?

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!

Quelle:php
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage