PassFront
  1. PassFront
  2. База знаний
  3. Основы языка

Сколько потоков в JS?

Основы языка

В JavaScript один основной поток выполнения. Весь пользовательский код работает в одном потоке, а асинхронность обеспечивается Event Loop и Web API окружения.

Однопоточность

В каждый момент выполняется только одна операция (один call stack). Два куска JS не выполняются параллельно в основном потоке.

console.log('1');
setTimeout(() => console.log('2'), 0); // браузер держит таймер вне потока
console.log('3');
// 1, 3, 2

Как достигается асинхронность

Долгие операции (таймеры, сеть, I/O) выполняет окружение (браузер/Node) вне JS-потока, а их коллбэки Event Loop ставит в очередь и выполняет, когда стек свободен.

Дополнительные потоки

Хотя основной поток один, параллелизм возможен:

  • Web Workers — отдельные потоки для тяжёлых вычислений (без доступа к DOM, обмен сообщениями).
  • Браузер сам использует потоки для сети, рендеринга, но код в них не пишут напрямую.
  • В Node.js — Worker Threads, а часть I/O выполняет пул потоков libuv.

Почему однопоточность

Упрощает работу с DOM (нет гонок и блокировок). Плата — тяжёлый синхронный код блокирует UI.

Коротко для собеседования

У JS один основной поток выполнения; асинхронность даёт не многопоточность, а Event Loop + Web API. Для реального параллелизма есть Web Workers (браузер) и Worker Threads (Node), но без доступа к DOM и с обменом сообщениями.

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