Голанг блокирующий и неблокирующий

Я несколько озадачен тем, как Go обрабатывает неблокирующие операции ввода-вывода. API в основном выглядят синхронно для меня, и при просмотре презентаций на Go довольно часто можно услышать комментарии типа «и блоки вызовов»

Go использует блокировку ввода-вывода при чтении из файлов или сети? Или есть какая-то магия, которая переписывает код при использовании внутри Go-процедуры?

Исходя из C # фона, это выглядит очень не интуитивно, в C # мы имеемawait ключевое слово при использовании асинхронных API. Что ясно говорит о том, что API может выдать текущий поток и продолжить позже внутри продолжения.

Так что TLDR; Будет ли Go блокировать текущий поток при выполнении операций ввода-вывода внутри подпрограммы Go или он будет преобразован в конечный автомат асинхронного ожидания типа C # с использованием продолжений?

Ответы на вопрос(2)

Ваш ответ на вопрос