我开始阅读Spring的Project Reactor Core参考,并且有几个问题,我还没有找到答案:
我知道NodeJS事件循环的基础知识,但是我不确定这是否是同一件事。
答案 0 :(得分:2)
线程如何参与流处理?
由您决定。使用publishOn
或subscribeOn
将部分管道的执行跳转到另一个Thread
(由Scheduler
抽象表示)。或使用与时间相关的运算符:默认情况下,这些运算符在Schedulers.parallel()
调度程序上运行,并且可以进行微调。任何其他运算符(不具有覆盖Scheduler
的覆盖符)都在从其接收其数据(Thread
信号)的同一onNext
上进行操作。
单个流的订阅者可以由多个线程执行吗?
不太完全:根据Reactive Streams
规范onNext
,事件必须是连续的,并且不得并行发生。 Flux#parallel(n).runOn(Scheduler)
对此规则引入了明确的例外。
可以在所有订阅者完成最后一个项目的处理之前触发终止事件吗?
每个“订户”(对subscribe
,block*
的呼叫)都会看到并生成自己的“流”。因此,对于传递给subscribe
的lambda,onComplete
永远不会在onNext
使用者之前或同时执行。
唯一的例外是,如果您有一个“热”源,那么它会对所有订阅者播放相同的事件。在这种情况下,较晚的订阅者将仅在进入后看到发射的元素(如果此类订阅者在原始序列完成后进行订阅,则它将看不到onNext
并立即onComplete
)。