java – 为什么在这种情况下我们需要Publish和RefCount Rx运算符?

我正在努力熟悉反应背压处理的问题,特别是通过阅读这个wiki:https://github.com/ReactiveX/RxJava/wiki/Backpressure

In the buffer paragraph,我们有更多涉及的示例代码:

// we have to multicast the original bursty Observable so we can use it
// both as our source and as the source for our buffer closing selector:
Observable

如果我理解正确,我们通过为缓冲区运算符生成去抖动信号流来有效地去除突发源流.

但为什么我们需要在这里使用发布和引用计数器?如果我们放弃它们会导致什么问题?评论并没有让我更清楚,默认情况下RxJava Observables不是多播吗?

最佳答案
答案在于hot and cold观察点之间的区别.

缓冲区运算符组合了两个流,无法知道它们有一个共同的源(在您的情况下).当激活(订阅)时,它将同时订阅它们,作为回报,它将触发对原始输入的2个不同订阅.

现在有2件事情可能发生,要么输入是热的可观察的,订阅没有效果,只能注册监听器,一切都将按预期工作,或者它是一个冷可观察,每个订阅将导致潜在的不同和不同步的流.

例如,冷可观察量可以是在订阅时执行网络请求并且通知结果的冷可观察量.不调用发布意味着将完成2个请求.

发布refcount / connect是将冷可观察变为热点的常用方法,确保单个订阅将发生,并且所有流的行为都相同.

相关文章

Java中的String是不可变对象 在面向对象及函数编程语言中,不...
String, StringBuffer 和 StringBuilder 可变性 String不可变...
序列化:把对象转换为字节序列的过程称为对象的序列化. 反序...
先说结论,是对象!可以继续往下看 数组是不是对象 什么是对...
为什么浮点数 float 或 double 运算的时候会有精度丢失的风险...
面试题引入 这里引申出一个经典问题,看下面代码 Integer a ...