Выбор ответа Middle Кластер, воркеры, масштабирование спрашивают часто обновлено

cluster или worker_threads

Вопрос

Сервер на 8 ядрах, обработчик генерирует превью картинки и на 300 мс грузит CPU. Остальные запросы в это время висят. Что решает именно эту проблему?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Вынести генерацию превью в пул workerthreads. Проблема в том, что синхронная CPU-работа блокирует event loop своего процесса.

Варианты ответа

  1. Вынести генерацию превью в пул worker_threadsправильный ответ
  2. cluster на 8 процессов, по одному на ядро
  3. Увеличить UV_THREADPOOL_SIZE до числа ядер
  4. Перейти с Express на Fastify ради скорости

Разбор

Проблема в том, что синхронная CPU-работа блокирует event loop своего процесса. Воркер выполняет её в отдельном потоке, и цикл остаётся свободным.

  • cluster даст 8 процессов, но каждый всё равно блокируется на своём превью: при 8 одновременных превью снова всё висит. Он увеличивает пропускную способность, а не убирает блокировку.
  • Пул libuv обслуживает встроенные операции (fs, crypto), твой JS-код он не выполняет.
  • Фреймворк ускоряет маршрутизацию, но не убирает синхронное вычисление.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме