Выбор ответа Senior Кластер, воркеры, масштабирование обновлено
Передача данных в worker_threads
Вопрос
Как передать в воркер ArrayBuffer на 200 МБ без копирования?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: worker.postMessage(buf, [buf]): передача владения буфером. По умолчанию postMessage копирует данные алгоритмом structured clone.
Варианты ответа
worker.postMessage(buf): сообщения всегда передаются по ссылке- Через глобальную переменную, у воркеров общая куча с главным
- Через
process.env, туда помещается двоичная строка worker.postMessage(buf, [buf]): передача владения буферомправильный ответ
Разбор
По умолчанию postMessage копирует данные алгоритмом structured clone. Если указать буфер в transfer list, владение памятью переходит воркеру без копирования, а у отправителя буфер становится нулевой длины. Нужен одновременный доступ: SharedArrayBuffer и Atomics.
- Без transfer list данные копируются.
process.envхранит только строки и не для данных.- У каждого воркера своя куча V8.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «Кластер, воркеры, масштабирование»
- Консистентное хеширование с виртуальными узлами
- Балансировка least connections
- Плавный взвешенный round-robin как в nginx
- Код-ревью: сервис перед масштабированием в 4 инстанса
- Модуль cluster
- cluster внутри Kubernetes
- Память у воркеров cluster
- cluster или worker_threads