Параллелизм и конкурентность
Web Workers, SharedArrayBuffer, Atomics, worker_threads
О чём эта глава
В предыдущей главе мы разобрали, как JavaScript обрабатывает тысячи асинхронных операций в одном потоке. Event loop — это конкурентность: один поток переключается между задачами. Но что делать, когда одного потока мало? Тяжёлые вычисления блокируют event loop, и никакой async/await не поможет.
Эта глава — про настоящий параллелизм: выполнение кода в нескольких потоках одновременно. Web Workers в браузере, worker_threads и cluster в Node.js, общая память через SharedArrayBuffer, атомарные операции и паттерны, которые делают многопоточный JavaScript управляемым.
Содержание
- Конкурентность vs параллелизм
- Web Workers
- SharedArrayBuffer и Atomics
- Параллелизм в Node.js
- Паттерны и решения
Что ты научишься делать
- Объяснять разницу между конкурентностью и параллелизмом
- Создавать 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
Песочница
Открыть песочницу — экспериментируй с воркерами и общей памятью