Вступить в клуб →
лёгкаявопросАсинхронность и event loop

Синхронный тяжёлый расчёт в HTTP-обработчике и параллельные запросы

В сервисе на Express есть эндпоинт:

app.get('/report', (req, res) => {
  let sum = 0;
  // синхронный расчёт, занимает около 2 секунд процессорного времени
  for (let i = 0; i < 2e9; i++) sum += i;
  res.json({ sum });
});

В этот момент в сервис приходят ещё 50 запросов на другие, лёгкие эндпоинты. Что с ними произойдёт?

  • Node.js создаст отдельный поток на каждое соединение, и лёгкие эндпоинты ответят как обычно, пока идёт расчёт
  • Они получат ошибку 503: Node.js отклоняет новые соединения, пока обработчик занят вычислением
  • Они обработаются параллельно, так как каждый обработчик Express выполняется в своём контексте
  • Все они будут ждать окончания расчёта: цикл занял единственный поток, в котором крутится event loop

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела