Встречается на собеседованиях • сегодня

Есть ли способ сделать JavaScript многопоточным

JavaScript изначально однопоточен, но есть несколько способов достичь параллелизма:

  1. Web Workers - позволяют запускать скрипты в фоновых потоках:
js
// main.js
const worker = new Worker('worker.js');
worker.postMessage('Hello!');

// worker.js
onmessage = (e) => {
  console.log(e.data); // 'Hello!'
  postMessage('World!');
};
  1. SharedArrayBuffer + Atomics - для разделяемой памяти между потоками (с ограничениями из-за Spectre)

  2. Service Workers - для фоновых процессов, кэширования и офлайн-работы

  3. WebAssembly с поддержкой потоков (через pthreads)

Основные ограничения:

  • Web Workers не имеют доступа к DOM
  • Общение между потоками только через postMessage
  • SharedArrayBuffer требует специальных HTTP-заголовков безопасности

Для CPU-intensive задач лучше использовать Web Workers, а для UI-операций - обычный event loop.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы