Параллелизм и конкурентность

Web Workers, SharedArrayBuffer, Atomics, worker_threads

О чём эта глава

В предыдущей главе мы разобрали, как JavaScript обрабатывает тысячи асинхронных операций в одном потоке. Event loop — это конкурентность: один поток переключается между задачами. Но что делать, когда одного потока мало? Тяжёлые вычисления блокируют event loop, и никакой async/await не поможет.

Эта глава — про настоящий параллелизм: выполнение кода в нескольких потоках одновременно. Web Workers в браузере, worker_threads и cluster в Node.js, общая память через SharedArrayBuffer, атомарные операции и паттерны, которые делают многопоточный JavaScript управляемым.

Содержание

  1. Конкурентность vs параллелизм
  2. Web Workers
  3. SharedArrayBuffer и Atomics
  4. Параллелизм в Node.js
  5. Паттерны и решения

Что ты научишься делать

  • Объяснять разницу между конкурентностью и параллелизмом
  • Создавать Web Workers и обмениваться данными через postMessage
  • Использовать SharedArrayBuffer и Atomics для работы с общей памятью
  • Выбирать между worker_threads, child_process и cluster в Node.js
  • Реализовывать пул воркеров и другие паттерны многопоточности
  • Принимать решение: нужен ли воркер для конкретной задачи

Связанные темы

  • Замыкания — замыкания не передаются через postMessage: функции нельзя клонировать
  • Асинхронность — event loop = concurrency, не parallelism; worker pool расширяет parallel limit

Задания

Перейти к заданиям — 3 easy, 2 medium, 3 hard

Песочница

Открыть песочницу — экспериментируй с воркерами и общей памятью