Голанг блокирующий и неблокирующий
Я несколько озадачен тем, как Go обрабатывает неблокирующие операции ввода-вывода. API в основном выглядят синхронно для меня, и при просмотре презентаций на Go довольно часто можно услышать комментарии типа «и блоки вызовов»
Go использует блокировку ввода-вывода при чтении из файлов или сети? Или есть какая-то магия, которая переписывает код при использовании внутри Go-процедуры?
Исходя из C # фона, это выглядит очень не интуитивно, в C # мы имеемawait
ключевое слово при использовании асинхронных API. Что ясно говорит о том, что API может выдать текущий поток и продолжить позже внутри продолжения.
Так что TLDR; Будет ли Go блокировать текущий поток при выполнении операций ввода-вывода внутри подпрограммы Go или он будет преобразован в конечный автомат асинхронного ожидания типа C # с использованием продолжений?