Quando uma goroutine bloqueia a E / S, como o planejador identifica que parou de bloquear?

Pelo que eu liaqui, o planejador golang determinará automaticamente se uma goroutine está bloqueando a E / S e passará automaticamente para o processamento de outras goroutines em um thread que não esteja bloqueado.

O que estou querendo saber é como o planejador descobre que a goroutine parou de bloquear a E / S.

Faz algum tipo de pesquisa de vez em quando para verificar se ainda está bloqueando? Existe algum tipo de thread de segundo plano em execução que verifica o status de todas as goroutines?

Por exemplo, se você fizesse uma solicitação HTTP GET dentro de uma goroutine que demorasse 5s para obter uma resposta, ela seria bloqueada enquanto aguardava a resposta, e o planejador passaria para o processamento de outra goroutine. Agora, considerando que, quando o servidor retorna uma resposta, como o agendador entende que a resposta chegou, e é hora de voltar à goroutine que criou o GET para que ele possa processar o resultado do GET?

questionAnswers(1)

yourAnswerToTheQuestion