Чем неблокирующая модель обработки отличается от модели «поток на запрос»?
- Что такое неблокирующий ввод-вывод?
«Поток на запрос»: пока запрос ждёт базу или сеть, его поток простаивает. Неблокирующая модель: мало потоков на много соединений — ожидание не держит поток, он берёт другую работу.
- Выигрыш при большом числе одновременных ожидающих запросов
- Требует неблокирующего кода по всей цепочке
- Виртуальные потоки дают похожий эффект с обычным кодом
А ещё В Spring — WebFlux на Netty
Подробно
В классической модели поток занят всё время обработки, включая ожидание ответа базы или внешнего сервиса, поэтому число одновременных запросов упирается в число потоков, а каждый поток стоит памяти. Неблокирующая модель освобождает поток на время ожидания. Плата — стиль кода: логика распадается на цепочки операторов, отладка усложняется, а один случайно поставленный блокирующий вызов способен парализовать весь сервис. Виртуальные потоки предлагают третий путь — привычный последовательный код без удержания ресурса на время ожидания.
Что хотят услышать
- Различие моделей.
- Когда выгоден неблокирующий подход.
Частые ошибки
- Выполнять блокирующие вызовы внутри реактивной цепочки.
- Переходить на реактивный стек без измеренной причины.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✓Немного потоков обслуживает много соединений: поток не ждёт ответа, а берёт другую работу
- ✗На каждый запрос создаётся отдельный поток, но с уменьшенным стеком, поэтому их помещается больше
- ✗Запросы обрабатываются строго последовательно, по одному
- ✗Обработка полностью переносится на клиента
Что спросят дальше
- Что произойдёт при блокирующем вызове в event loop?
- Как виртуальные потоки меняют этот выбор?
Разбор темы
- Reactive и Spring WebFlux
Неблокирующая модель и event loop, Reactive Streams и Reactor (Mono/Flux), backpressure, реактивный стек целиком, выбор MVC/WebFlux и цена сложности.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.