流是否由项目反应器中的多个线程处理?
Are streams handled by multiple threads in project-reactor?
我正在开始阅读 Spring 的 Project Reactor Core 参考资料,我有几个问题尚未找到答案:
- 线程如何参与流处理?
- 单个流的订阅者是否可以被多个线程执行?
- 是否可以在所有订阅者处理完最后一项之前触发终止事件?
我了解 NodeJS 事件循环的基础知识,但我不确定这是否相同。
How are threads involved in stream processing?
由你决定。使用 publishOn
或 subscribeOn
将部分管道的执行跳转到另一个 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"(调用 subscribe
、block*
)看到并生成自己的 "stream"。因此,关于您传递给 subscribe
的 lambda,onComplete
永远不会在 onNext
消费者之前或同时执行。
唯一的例外是如果您有一个 "hot" 源,一个向所有订阅者播放相同事件的源。在这种情况下,迟到的订阅者只会看到他们进来后发出的元素(如果这样的订阅者在原始序列完成后订阅,那么它将看到 NO onNext
并立即 onComplete
)。
我正在开始阅读 Spring 的 Project Reactor Core 参考资料,我有几个问题尚未找到答案:
- 线程如何参与流处理?
- 单个流的订阅者是否可以被多个线程执行?
- 是否可以在所有订阅者处理完最后一项之前触发终止事件?
我了解 NodeJS 事件循环的基础知识,但我不确定这是否相同。
How are threads involved in stream processing?
由你决定。使用 publishOn
或 subscribeOn
将部分管道的执行跳转到另一个 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"(调用 subscribe
、block*
)看到并生成自己的 "stream"。因此,关于您传递给 subscribe
的 lambda,onComplete
永远不会在 onNext
消费者之前或同时执行。
唯一的例外是如果您有一个 "hot" 源,一个向所有订阅者播放相同事件的源。在这种情况下,迟到的订阅者只会看到他们进来后发出的元素(如果这样的订阅者在原始序列完成后订阅,那么它将看到 NO onNext
并立即 onComplete
)。