> Как использовать несколько потоков в JavaScript (JavaScript)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: intelsy
Стек: JavaScript
> Пример ответа
В JavaScript многопоточность реализуется через Web Workers (в браузере) и Worker Threads (в Node.js). Основной поток (UI-поток) остаётся однопоточным, а Worker'ы выполняют код в фоне, не блокируя интерфейс.
Пример с Web Worker (браузер):
- Создаём файл
worker.js:
JAVASCRIPT// worker.jsself.onmessage = function(e) {const result = e.data * 2; // тяжёлые вычисленияself.postMessage(result);};
- Используем в основном коде:
JAVASCRIPTconst 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), что исключает гонки данных, но требует явной передачи данных.
> Похожие задачи по frontend
Что такое замыкания в JavaScript и для чего они нужны
Как записывать ошибки в массив по индексу, соответствующему индексу промиса в JavaScript?
Как реализовать полифилл для Array.prototype.some с учетом callback и thisArg?
Как реализовать возврат true или false в полифилле some для прерывания перебора при первом true?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью