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

Are streams handled by multiple threads in project-reactor?

我正在开始阅读 Spring 的 Project Reactor Core 参考资料,我有几个问题尚未找到答案:

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

How are threads involved in stream processing?

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

Can subscribers of a single stream be executed by multiple threads?

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

Can terminate event be fired before all subscribers finishes processing the last item?

每个 "subscriber"(调用 subscribeblock*)看到并生成自己的 "stream"。因此,关于您传递给 subscribe 的 lambda,onComplete 永远不会在 onNext 消费者之前或同时执行。

唯一的例外是如果您有一个 "hot" 源,一个向所有订阅者播放相同事件的源。在这种情况下,迟到的订阅者只会看到他们进来后发出的元素(如果这样的订阅者在原始序列完成后订阅,那么它将看到 NO onNext 并立即 onComplete )。