Wie erkennt der Scheduler, wenn eine Goroutine die E / A blockiert, dass die Blockierung gestoppt wurde?

Von was ich gelesen habeHie, der Golang-Scheduler ermittelt automatisch, ob eine Goroutine die E / A blockiert, und wechselt automatisch zur Verarbeitung anderer Goroutinen in einem Thread, der nicht blockiert ist.

Was ich mich frage, ist, wie der Scheduler dann herausfindet, dass diese Goroutine aufgehört hat, E / A zu blockieren.

Wird nur von Zeit zu Zeit eine Art Abfrage durchgeführt, um zu überprüfen, ob die Blockierung noch besteht? Gibt es eine Art Hintergrund-Thread, der den Status aller Goroutinen überprüft?

Wenn Sie beispielsweise eine HTTP-GET-Anforderung in einer Goroutine ausführen, für deren Empfang 5 Sekunden benötigt wurden, wird sie blockiert, während auf die Antwort gewartet wird, und der Scheduler wechselt zur Verarbeitung einer anderen Goroutine. Nun, wenn der Server eine Antwort zurückgibt, wie kann der Scheduler dann verstehen, dass die Antwort eingetroffen ist und dass es Zeit ist, zu der Goroutine zurückzukehren, die den GET erstellt hat, damit er das Ergebnis des GET verarbeiten kann?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage