Обрабатываются ли потоки несколькими потоками в проекте-реакторе? - PullRequest
0 голосов
/ 20 декабря 2018

Я начинаю знакомиться с Spring Project Reactor Core, и у меня есть несколько вопросов, на которые мне еще предстоит найти ответ:

  • Как потоки участвуют в обработке потока?
  • Могут ли подписчики одного потока выполняться несколькими потоками?
  • Можно ли инициировать событие завершения до того, как все подписчики завершат обработку последнего элемента?

Я знаю основы цикла событий NodeJS, но не уверен, что это одно и то же.

1 Ответ

0 голосов
/ 20 декабря 2018

Как потоки участвуют в обработке потока?

Вам решать.Используйте publishOn или subscribeOn, чтобы перейти от выполнения части конвейера к другой Thread (как представлено абстракцией Scheduler).Или используйте операторы, связанные со временем: по умолчанию они работают в планировщике Schedulers.parallel() и могут быть точно настроены.Любой другой оператор (у которого нет переопределения, которое принимает Scheduler) работает с тем же Thread, которому он получил свои данные (сигнал onNext) от.

Может подписчикиодин поток будет выполняться несколькими потоками?

Не совсем: согласно Reactive Streams спецификации onNext события должны быть последовательными и НЕ ДОЛЖНЫ происходить параллельно.Flux#parallel(n).runOn(Scheduler) вводит явное исключение из этого правила.

Можно ли инициировать событие завершения до того, как все подписчики завершат обработку последнего элемента?

Каждый «подписчик» (вызовsubscribe, block*) видит и генерирует свой «поток».Таким образом, в отношении лямбды, которую вы передаете subscribe, onComplete никогда не выполняется до или одновременно с onNext потребителем.

Единственное исключение, если у вас есть "горячий"Источник, который воспроизводит одни и те же события всем своим подписчикам.В этом случае поздние подписчики будут видеть только элементы, которые были выпущены после того, как они вошли (и если такой подписчик подпишется ПОСЛЕ того, как первоначальная последовательность завершена, то он увидит НЕТ onNext и сразу же onComplete).

...