Pull to refresh

Comments 2

Асинхронный код позволяет выполнять несколько задач одновременно.

Столько раз упоминается слово "одновременно", но асинхронно - это не "одновременно", а "по очереди", но нескольких задач одним потоком. Т.е. есть 3 задачи, и один поток, который берет первую задачу, пока она не упрется в IO. Если не упрется в IO, выполнит первую - возьмется за вторую, а если первая встанет на IO, то пока она делает свой IO - поток сходит повыполнять вторую.

Так что асинхронный код позволяет выполнять большее количество задач меньшим количеством потоков за счет того что потоки не спят вместе с задачами в ожидании IO - вот верная формулировка, ну и тд по тексту.

Строго говоря не в I/O упрётся, а в .await на future, который может быть чем угодно. Тем же tokio::time::sleep например.

Тот же дисковый I/O обычно как раз блокирующий в Расте, просто Токио выполняет его в отдельном пуле потоков (spawn_blocking)

Sign up to leave a comment.