Я несколько смущен тем, как Go обрабатывает не блокирующий IO. API в основном выглядит синхронно мне, и при просмотре презентаций на Go его не редкость слышать такие комментарии, как "и блоки вызовов",
Is Go использует блокировку ввода-вывода при чтении из файлов или сети? Или есть какая-то магия, которая переписывает код при использовании изнутри Go Routine?
Исходя из фона С#, это кажется очень неинтуитивным, в С# у нас есть ключевое слово await
при потреблении асинхронных API. Что четко сообщает, что API может дать текущий поток и продолжить позже в продолжении.
Так TL;DR; Will Go блокирует текущий поток при выполнении IO внутри процедуры Go или будет ли он преобразован в С#, например async, ожидающий конечный автомат с продолжением?