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