Блокируется ли поток при sync?
Продвинутые темы
Да, при синхронной операции поток блокируется: пока выполняется синхронный код, ничего другого произойти не может — JavaScript однопоточный.
Как это работает
Синхронный код выполняется в call stack по одной операции. Пока стек занят, Event Loop не может обработать другие задачи, а браузер — отрисовать или ответить на события:
console.log('до');
for (let i = 0; i < 1e9; i++) {} // блокирует поток на время цикла
console.log('после'); // выполнится только после циклаВо время тяжёлого синхронного цикла интерфейс «замерзает»: не реагирует на клики, не анимируется.
Примеры блокировки
- Тяжёлые вычисления (большие циклы).
- Синхронные API:
alert(),prompt(), синхронныйXMLHttpRequest(устарел),fs.readFileSync(Node).
Как не блокировать
- Асинхронные операции — сеть, таймеры не блокируют (выполняются вне потока).
- Разбивать работу — на части через
setTimeout/микрозадачи. - Web Workers — тяжёлые вычисления в отдельном потоке.
const worker = new Worker('heavy.js'); // не блокирует основной потокКоротко для собеседования
Да, синхронный код блокирует единственный поток JS: пока он выполняется, Event Loop не обрабатывает другие задачи, а UI «замерзает». Блокируют тяжёлые циклы, alert, синхронные API. Не блокируют асинхронные операции; тяжёлые вычисления выносят в Web Workers.