Вопрос с собеседования · Spring

Чем неблокирующая модель обработки отличается от модели «поток на запрос»?

JuniorReactive и WebFluxSpringWebFlux
Ещё спрашивают так:
  • Что такое неблокирующий ввод-вывод?
Коротко

«Поток на запрос»: пока запрос ждёт базу или сеть, его поток простаивает. Неблокирующая модель: мало потоков на много соединений — ожидание не держит поток, он берёт другую работу.

  • Выигрыш при большом числе одновременных ожидающих запросов
  • Требует неблокирующего кода по всей цепочке
  • Виртуальные потоки дают похожий эффект с обычным кодом

А ещё В Spring — WebFlux на Netty

Подробно

В классической модели поток занят всё время обработки, включая ожидание ответа базы или внешнего сервиса, поэтому число одновременных запросов упирается в число потоков, а каждый поток стоит памяти. Неблокирующая модель освобождает поток на время ожидания. Плата — стиль кода: логика распадается на цепочки операторов, отладка усложняется, а один случайно поставленный блокирующий вызов способен парализовать весь сервис. Виртуальные потоки предлагают третий путь — привычный последовательный код без удержания ресурса на время ожидания.

Что хотят услышать

  • Различие моделей.
  • Когда выгоден неблокирующий подход.

Частые ошибки

  • Выполнять блокирующие вызовы внутри реактивной цепочки.
  • Переходить на реактивный стек без измеренной причины.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Немного потоков обслуживает много соединений: поток не ждёт ответа, а берёт другую работу
  • ✗На каждый запрос создаётся отдельный поток, но с уменьшенным стеком, поэтому их помещается больше
  • ✗Запросы обрабатываются строго последовательно, по одному
  • ✗Обработка полностью переносится на клиента

Что спросят дальше

  • Что произойдёт при блокирующем вызове в event loop?
  • Как виртуальные потоки меняют этот выбор?

Разбор темы

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования