Cuando una rutina rutinaria bloquea en E / S, ¿cómo identifica el planificador que ha dejado de bloquear?

Por lo que he leídoaquí, el planificador de golang determinará automáticamente si una rutina está bloqueando en E / S, y cambiará automáticamente al procesamiento de otras rutinas en un hilo que no está bloqueado.

Lo que me pregunto es cómo el planificador se da cuenta de que esa rutina ha dejado de bloquear la E / S.

¿Realiza algún tipo de sondeo de vez en cuando para verificar si todavía está bloqueando? ¿Hay algún tipo de subproceso en ejecución que verifique el estado de todas las goroutinas?

Por ejemplo, si tuviera que hacer una solicitud HTTP GET dentro de una rutina que tardó 5 segundos en obtener una respuesta, se bloquearía mientras esperaba la respuesta, y el programador pasaría a procesar otra rutina. Ahora que, cuando el servidor devuelve una respuesta, ¿cómo entiende el planificador que la respuesta ha llegado y es hora de volver a la rutina que hizo el GET para que pueda procesar el resultado del GET?

Respuestas a la pregunta(1)

Su respuesta a la pregunta