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