PassFront
  1. PassFront
  2. База знаний
  3. Продвинутые темы

Блокируется ли поток при 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.

Другие вопросы раздела