GOMAXPROCS auf 2 gesetzt, Programm bleibt jedoch stehen
Beim Versuch, ein Programm auszuführen, das runtime.GOMAXPROCS(2) festlegt, kann es zu Problemen kommen unerwartete Hänger trotz hoher CPU-Auslastung. Dies geschieht aufgrund einer Endlosschleife in einer Goroutine mit der Bezeichnung „forever()“.
Diese Schleife verbraucht einen gesamten Betriebssystem-Thread, ohne nützliche Arbeit auszuführen, und beeinträchtigt so die Goroutinen der Laufzeit. Insbesondere in Go1.5 kann es die Stop-the-World-Phase des Garbage Collectors blockieren.
Um dieses Problem zu beheben, kann man einen Planungspunkt innerhalb der Forever()-Schleife einführen:
func forever() { for { runtime.Gosched() } }
Allerdings ist es im Allgemeinen effizienter, die Busy-Schleife vollständig zu eliminieren, um eine reibungslose Ausführung des Programms zu gewährleisten.
Das obige ist der detaillierte Inhalt vonWarum bleibt mein Go-Programm trotz hoher CPU-Auslastung stehen, wenn GOMAXPROCS(2) eingestellt ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!