流是否由项目反应器中的多个线程处理?

时间:2018-12-20 09:19:00

标签: project-reactor

我开始阅读Spring的Project Reactor Core参考,并且有几个问题,我还没有找到答案:

  • 线程如何参与流处理?
  • 单个流的订阅者可以由多个线程执行吗?
  • 可以在所有订阅者完成最后一个项目的处理之前触发终止事件吗?

我知道NodeJS事件循环的基础知识,但是我不确定这是否是同一件事。

1 个答案:

答案 0 :(得分:2)

  

线程如何参与流处理?

由您决定。使用publishOnsubscribeOn将部分管道的执行跳转到另一个Thread(由Scheduler抽象表示)。或使用与时间相关的运算符:默认情况下,这些运算符在Schedulers.parallel()调度程序上运行,并且可以进行微调。任何其他运算符(不具有覆盖Scheduler的覆盖符)都在从其接收其数据(Thread信号)的同一onNext上进行操作。

  

单个流的订阅者可以由多个线程执行吗?

不太完全:根据Reactive Streams规范onNext,事件必须是连续的,并且不得并行发生。 Flux#parallel(n).runOn(Scheduler)对此规则引入了明确的例外。

  

可以在所有订阅者完成最后一个项目的处理之前触发终止事件吗?

每个“订户”(对subscribeblock*的呼叫)都会看到并生成自己的“流”。因此,对于传递给subscribe的lambda,onComplete永远不会在onNext使用者之前或同时执行。

唯一的例外是,如果您有一个“热”源,那么它会对所有订阅者播放相同的事件。在这种情况下,较晚的订阅者将仅在进入后看到发射的元素(如果此类订阅者在原始序列完成后进行订阅,则它将看不到onNext并立即onComplete)。