Problem: Endlosschleifen-Goroutine blockiert HTTP-Server
In Go wird erwartet, dass Endlosschleifen-Goroutinen andere Goroutinen blockieren, wenn weniger Threads verwendet werden als verfügbare Kerne, auch wenn runtime.GOMAXPROCS entsprechend eingestellt ist. Dieses Verhalten unterscheidet sich jedoch bei Verwendung des Pakets net/http.
F: Warum blockiert eine Endlosschleifen-Goroutine den HTTP-Server nach einigen Aufrufen?
A: Der Planer der Go-Laufzeit ist nicht vollständig präventiv. In Ihrem Beispiel enthält die Endlosschleife keine Funktionsaufrufe, sodass der Scheduler nicht eingreifen kann. Dies führt zu einer kontinuierlichen Verarbeitung der Schleife durch einen Thread und blockiert andere Goroutinen, einschließlich des HTTP-Servers.
F: Warum kann runtime.LockOSThread() das Problem nicht lösen?
A: runtime.LockOSThread() soll sicherstellen, dass die leere Schleife in einem separaten Thread läuft. Aufgrund der nicht präventiven Natur des Schedulers ist dieser Ansatz in diesem Fall jedoch unwirksam.
Lösung:
Das obige ist der detaillierte Inhalt vonWarum blockiert eine Endlosschleifen-Goroutine einen Go-HTTP-Server?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!