Сообщение Re[8]: Можно ли избавиться от async|await? от 15.12.2025 7:57
Изменено 15.12.2025 8:03 mrTwister
Re[8]: Можно ли избавиться от async|await?
Здравствуйте, Doom100500, Вы писали:
D>Как вызов функции foo() становится асинхронным? То, что потоки берутся из пула — это уже нюансы.
Потому что он не блокирует поток ОС. При работе foo поток занимает, конечно, но foo не нужно дорабатывать до конца, чтобы отпустить этот поток.
D>Task.Delay — и async/await — это про concurrency, который вовсе не обязательно parallelism. Вот и весь нюанс.
Вот и любая функция в go (а так де горутины) — это тоже про concurrency, а не про параллелизм.
D>Простой вызов time.Sleep(1000), как и просто foo() в go блокирует текущую горутину, которая так, или иначе, выполняется на потоке (но тоток из заранее аллоцированного пула).
Горутину блокирует, а поток не блокирует. При вызове time.Sleep(1000) поток сразу отпускается и передается другой горутине. Тоже самое происходит при вызове Task.Delay в C#
D>go time.Sleep(1000) — это асинхронно — создаём горутину и выполняем её на свободном потоке из пула, если нет, то ждём когда поток освободится. Это и есть отличие concurrency от parallelism.
Горутина создается, но поток ОС она не потребляет, так как при вызове time.Sleep поток сразу отпускается.
D>Операционная система оперирует понятием "поток", а остальное — это навешанные абстракции. Чудес не бывает.
Ну да
D>Как вызов функции foo() становится асинхронным? То, что потоки берутся из пула — это уже нюансы.
Потому что он не блокирует поток ОС. При работе foo поток занимает, конечно, но foo не нужно дорабатывать до конца, чтобы отпустить этот поток.
D>Task.Delay — и async/await — это про concurrency, который вовсе не обязательно parallelism. Вот и весь нюанс.
Вот и любая функция в go (а так де горутины) — это тоже про concurrency, а не про параллелизм.
D>Простой вызов time.Sleep(1000), как и просто foo() в go блокирует текущую горутину, которая так, или иначе, выполняется на потоке (но тоток из заранее аллоцированного пула).
Горутину блокирует, а поток не блокирует. При вызове time.Sleep(1000) поток сразу отпускается и передается другой горутине. Тоже самое происходит при вызове Task.Delay в C#
D>go time.Sleep(1000) — это асинхронно — создаём горутину и выполняем её на свободном потоке из пула, если нет, то ждём когда поток освободится. Это и есть отличие concurrency от parallelism.
Горутина создается, но поток ОС она не потребляет, так как при вызове time.Sleep поток сразу отпускается.
D>Операционная система оперирует понятием "поток", а остальное — это навешанные абстракции. Чудес не бывает.
Ну да
Re[8]: Можно ли избавиться от async|await?
Здравствуйте, Doom100500, Вы писали:
D>Как вызов функции foo() становится асинхронным? То, что потоки берутся из пула — это уже нюансы.
Потому что он не блокирует поток ОС. При работе foo поток занимает, конечно, но foo не нужно дорабатывать до конца, чтобы отпустить этот поток.
D>Task.Delay — и async/await — это про concurrency, который вовсе не обязательно parallelism. Вот и весь нюанс.
Вот и любая функция в go (а так же горутины) — это тоже про concurrency, а не про параллелизм.
D>Простой вызов time.Sleep(1000), как и просто foo() в go блокирует текущую горутину, которая так, или иначе, выполняется на потоке (но тоток из заранее аллоцированного пула).
Горутину блокирует, а поток не блокирует. При вызове time.Sleep(1000) поток сразу отпускается и передается другой горутине. Тоже самое происходит при вызове Task.Delay в C#
D>go time.Sleep(1000) — это асинхронно — создаём горутину и выполняем её на свободном потоке из пула, если нет, то ждём когда поток освободится. Это и есть отличие concurrency от parallelism.
Горутина создается, но поток ОС она не потребляет, так как при вызове time.Sleep поток сразу отпускается.
D>Операционная система оперирует понятием "поток", а остальное — это навешанные абстракции. Чудес не бывает.
Ну да
D>Как вызов функции foo() становится асинхронным? То, что потоки берутся из пула — это уже нюансы.
Потому что он не блокирует поток ОС. При работе foo поток занимает, конечно, но foo не нужно дорабатывать до конца, чтобы отпустить этот поток.
D>Task.Delay — и async/await — это про concurrency, который вовсе не обязательно parallelism. Вот и весь нюанс.
Вот и любая функция в go (а так же горутины) — это тоже про concurrency, а не про параллелизм.
D>Простой вызов time.Sleep(1000), как и просто foo() в go блокирует текущую горутину, которая так, или иначе, выполняется на потоке (но тоток из заранее аллоцированного пула).
Горутину блокирует, а поток не блокирует. При вызове time.Sleep(1000) поток сразу отпускается и передается другой горутине. Тоже самое происходит при вызове Task.Delay в C#
D>go time.Sleep(1000) — это асинхронно — создаём горутину и выполняем её на свободном потоке из пула, если нет, то ждём когда поток освободится. Это и есть отличие concurrency от parallelism.
Горутина создается, но поток ОС она не потребляет, так как при вызове time.Sleep поток сразу отпускается.
D>Операционная система оперирует понятием "поток", а остальное — это навешанные абстракции. Чудес не бывает.
Ну да