> Как использовать несколько потоков в JavaScript (JavaScript)

Уровень: senior · Роль: frontend · Категория: Технические вопросы

Компании: intelsy

Стек: JavaScript

> Пример ответа

В JavaScript многопоточность реализуется через Web Workers (в браузере) и Worker Threads (в Node.js). Основной поток (UI-поток) остаётся однопоточным, а Worker'ы выполняют код в фоне, не блокируя интерфейс.

Пример с Web Worker (браузер):

  1. Создаём файл worker.js:
JAVASCRIPT
// worker.js
self.onmessage = function(e) {
const result = e.data * 2; // тяжёлые вычисления
self.postMessage(result);
};
  1. Используем в основном коде:
JAVASCRIPT
const worker = new Worker('worker.js');
worker.postMessage(5); // отправляем данные
worker.onmessage = function(e) {
console.log('Результат:', e.data); // 10
};

Ключевые особенности:

  • Worker'ы не имеют доступа к DOM, window, document.
  • Общение через сообщения (postMessage / onmessage), данные копируются (структурное клонирование), а не передаются по ссылке.
  • Для Node.js используется const { Worker } = require('worker_threads') с аналогичным принципом.
  • Альтернатива для лёгких задач - setTimeout или requestAnimationFrame, но это не настоящая многопоточность, а лишь асинхронность.

Важно: Потоки не разделяют память напрямую (кроме SharedArrayBuffer с синхронизацией через Atomics), что исключает гонки данных, но требует явной передачи данных.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью