Golang bloqueo y no bloqueo

Estoy algo confundido sobre cómo Go maneja las IO sin bloqueo. La mayoría de las API me parecen sincrónicas, y cuando veo presentaciones en Go, no es raro escuchar comentarios como "y los bloqueos de llamadas"

¿Go utiliza el bloqueo de E / S cuando lee archivos o redes? ¿O hay algún tipo de magia que reescribe el código cuando se usa desde dentro de una rutina de rutina?

Viniendo de un fondo de C #, esto se siente muy poco intuitivo, en C # tenemos elawait palabra clave al consumir API asíncronas. Lo que comunica claramente que la API puede generar el hilo actual y continuar más tarde dentro de una continuación.

Entonces TLDR; ¿Bloqueará Go el subproceso actual al hacer IO dentro de una rutina Go, o se transformará en un C # como async aguardará la máquina de estado usando continuaciones?

Respuestas a la pregunta(3)

Su respuesta a la pregunta