Re[11]: Можно ли избавиться от async|await?
От: Doom100500 Израиль  
Дата: 15.12.25 09:24
Оценка:
Здравствуйте, mrTwister, Вы писали:

T>Здравствуйте, Doom100500, Вы писали:


D>>Здравствуйте, mrTwister, Вы писали:


T>>>При вызове time.Sleep(1000) поток сразу отпускается и передается другой горутине. Тоже самое происходит при вызове Task.Delay в C#


D>>Ок, дошло. Но почему вызов foo(), в которой обычные императивные вычисления — асинхронный? При условии, что там не используются ни sync, ни Sleep, ни каналы, ни select. Такой вызов и есть "по умолчанию".


T>Потому что компилятор принудительно в foo расставит точки останова, в которых будет отпускаться поток ОС. И даже если в foo крутится пустой бесконечный цикл, рантайм go через особые хаки такую точку останова туда внедрит.


Ну так это не про вызовы, а вообще про все инструкции. Функция может и заинлайниться.
В любом случае, понятно почему всё async.
Спасибо за внимание
Отредактировано 15.12.2025 9:26 Doom100500 . Предыдущая версия . Еще …
Отредактировано 15.12.2025 9:25 Doom100500 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.