После вопроса Настоящая документация действительно дает некоторые подсказки о модели параллелизма и потоках, которые можно было бы ожидать (но я все еще думаю, что Spring новички).
В нем обсуждается разница между Spring MVC и Spring WebFlux (модель с одним потоком на запрос и цикл событий):
В Spring MVC и приложениях сервлетов в целом предполагается, что приложения могут блокировать текущий поток, например для удаленных вызовов, и по этой причине контейнеры сервлетов используют большой пул потоков, чтобы поглотить потенциальную блокировку во время обработки запроса.
В Spring WebFlux и неблокирующих серверах в целом предполагается, что приложения не будут блокироваться, и поэтому неблокирующие серверы используют небольшой пул потоков фиксированного размера (рабочие циклы событий) для обработки запросов. Вызов API блокировки
Но обратите внимание, что приложения Spring MVC также могут вносить некоторую асинхронность (см. Servlet 3 Async). И я предлагаю эту презентацию для обсуждения Сервлет 3.1 NIO и WebFlux.
Вернемся к документации: он также предполагает, что при работе с реактивными потоками у вас есть некоторый контроль:
Что делать, если вам действительно нужна библиотека блокировки?
И Reactor, и RxJava предоставляют оператор publishOn для продолжения обработки в другом потоке.
(Для получения дополнительной информации см. планирование в Reactor)
Здесь также обсуждаются темы, которые вы можете ожидать в приложениях WebFlux (мой жирный):
Модель потоков
Какие потоки вы должны ожидать увидеть на сервере, работающем с Spring WebFlux?
- На «ванильном» сервере Spring WebFlux (например, без доступа к данным или других дополнительных зависимостей) вы можете ожидать один поток для сервера и несколько других для обработки запросов (обычно столько, сколько ядер ЦП) < / сильный>. Контейнеры сервлетов, однако, могут начинаться с большего количества потоков (например, 10 на Tomcat) для поддержки как сервлета, блокирующего ввод-вывод, так и сервлета 3.1, неблокирующего использования ввода-вывода.
- Реактивный WebClient работает в стиле цикла событий. Таким образом, вы увидите небольшое фиксированное количество потоков обработки, связанных с этим, например "response-http-nio-" с соединителем Reactor Netty. Однако, если Reactor Netty используется как для клиента, так и для сервера, по умолчанию они будут совместно использовать ресурсы цикла событий.
- Reactor и RxJava предоставляют абстракции пула потоков, называемые планировщиками, для использования с оператором publishOn, который используется для переключения обработки в другой пул потоков. У планировщиков есть имена, которые предлагают конкретную стратегию параллелизма, например «параллельный» для работы с привязкой к ЦП с ограниченным количеством потоков или «эластичный» для работы с привязкой к вводу-выводу с большим количеством потоков. Если вы видите такие потоки, это означает, что какой-то код использует определенную стратегию планировщика пула потоков.
- Библиотеки доступа к данным и другие сторонние зависимости также могут создавать и использовать собственные потоки.
Частично вы можете настроить детали потоковой модели через конфигурацию
Чтобы настроить модель потоковой передачи для сервера, вам необходимо использовать специфичные для сервера API-интерфейсы конфигурации или, если вы используете Spring Boot, проверить параметры конфигурации Spring Boot для каждого сервера. WebClient можно настроить напрямую. Для всех остальных библиотек обратитесь к соответствующей документации.
Более того, как, например, обсуждение Количество потоков по умолчанию в Spring реактивная конфигурация webflux при загрузке 2.0 основные моменты,
Количество потоков по умолчанию для обработки запросов определяется базовым веб-сервером; по умолчанию Spring Boot 2.0 использует Reactor Netty, который использует настройки Netty по умолчанию.
это вопрос компонентов по умолчанию и их значений по умолчанию (и общей конфигурации, в том числе прозрачно вводимых через аннотации), которые также могут меняться в зависимости от версий Spring / Boot и соответствующих зависимостей. Сказал, что ваши предположения верны.
person
metaphori
schedule
02.06.2018