Чем асинхронное программирование (async/await) отличается от многопоточного?
Уровень: Senior
Ответ
При многопоточном (preemptive multithreading) планированием задач занимается ОС: потоки могут прерывать друг друга в любой момент, переключение контекста может происходить асинхронно. В async/await (кооперативная многозадачность) переключение задач происходит только в определённых точках (операция await) – сами задачи уступают управление. Async код обычно выполняется в одном потоке, что устраняет проблемы конкурентного доступа (race conditions) без блокировок, но требуется, чтобы задачи часто отпускали управление. В многопоточном коде несколько потоков могут реально выполняться параллельно (при наличии нескольких ядер), в асинхронном – параллелизм только логический (один поток быстро переключается между задачами).