В чем разница между синхронным кодом с циклом while и асинхронным кодом?
Асинхронность и Event Loop
Синхронный цикл `while` блокирует поток на всё время выполнения, а асинхронный код запускает операцию и освобождает поток, обрабатывая результат позже через Event Loop.
Синхронный while
Выполняется целиком в call stack, блокируя поток — ничего другого не происходит, пока цикл не завершится:
while (condition) {
heavyWork(); // поток занят, UI "замерзает"
}
console.log('после'); // только после завершения циклаИнтерфейс не реагирует на клики, не анимируется во время цикла.
Асинхронный код
Запускает операцию (сеть, таймер) вне потока и продолжает работу; результат обрабатывается позже:
fetch(url).then(handle); // поток свободен
console.log('после'); // выполнится сразу, не дожидаясь ответаПоток не блокируется, UI отзывчив.
Различия
- Блокировка:
whileблокирует поток; асинхронный код — нет. - Порядок: синхронный код по порядку; асинхронный — коллбэки позже (через очереди).
- UI: тяжёлый
whileзамораживает интерфейс; асинхронность сохраняет отзывчивость.
Нюансы
Асинхронность не делает вычисления параллельными — она про ожидание (I/O). Тяжёлые вычисления в цикле блокируют даже «асинхронный» код (они синхронны). Для них — Web Workers.
Коротко для собеседования
Синхронный while блокирует единственный поток на всё время — UI замерзает. Асинхронный код запускает операцию и освобождает поток, обрабатывая результат позже через Event Loop — UI отзывчив. Асинхронность про ожидание I/O, а не про параллельные вычисления (для них — Web Workers).