Здравствуйте, mrTwister, Вы писали:
T>Здравствуйте, Doom100500, Вы писали:
D>>Здравствуйте, mrTwister, Вы писали:
T>>>При вызове time.Sleep(1000) поток сразу отпускается и передается другой горутине. Тоже самое происходит при вызове Task.Delay в C#
D>>Ок, дошло. Но почему вызов foo(), в которой обычные императивные вычисления — асинхронный? При условии, что там не используются ни sync, ни Sleep, ни каналы, ни select. Такой вызов и есть "по умолчанию".
T>Потому что компилятор принудительно в foo расставит точки останова, в которых будет отпускаться поток ОС. И даже если в foo крутится пустой бесконечный цикл, рантайм go через особые хаки такую точку останова туда внедрит.
Ну так это не про вызовы, а вообще про все инструкции. Функция может и заинлайниться.
В любом случае, понятно почему всё async.