0

Модель потоков в Spring WebFlux и Reactor

16

Проблема с моделью параллелизма и потоков в WebFlux и Reactor

Я сейчас экспериментирую с реактивным программированием, используя Spring 5.0.0.RC2, Reactor 3.1.0.M2 и Spring Boot 2.0.0.M2.

Меня интересует модель параллелизма и потоков, используемая WebFlux и Reactor, чтобы правильно реализовать приложение и управлять изменяемым состоянием.

В документации по Reactor указано, что библиотека считается независимой от параллелизма и упоминается абстракция Scheduler. Однако документация WebFlux не содержит информации на этот счет.

Тем не менее, при использовании WebFlux через Spring Boot определенная модель потоков все же выставляется.

Вот что я выяснил в ходе своих экспериментов:

  • Модель не является ни "1 поток события", ни "1 поток события + работники"
  • Используются несколько пулов потоков
  • Потоки "reactor-http-nio-3": вероятно, по одному на ядро, обрабатывают входящие HTTP-запросы
  • Потоки "Thread-7": используются асинхронными запросами к MongoDB или HTTP-ресурсам
  • Потоки "parallel-1": по одному на ядро, создаются функцией Schedulers.parallel() из Reactor, используются операторами задержки и подобными
  • Разделяемое изменяемое состояние должно синхронизироваться приложением
  • ThreadLocal (для состояния приложения, логирования MDC и т. д.) не имеют области запроса, поэтому не представляют большого интереса

Правильно ли это? Какова модель параллелизма и потоков в WebFlux: например, какие использованы пула потоков по умолчанию?

Спасибо за информацию!

0 ответ(ов)

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь