一点一点啃RxJava(四#背压#)

        emmmm......本来我以为Rxjava应该写完了,但是仔细想想,还有一个比较重要的概念还没有涉及到,那就是“背压”。

        一开始看RxJava的文档时看到背压这个概念的时候我是拒绝的,因为,你不能说这是背压,我就能理解这就是背压,我要自己试一下,我试过之后再告诉你们,我试过之后知道这是背压,你们看完之后也会知道。

        想象一个经典的生产者消费者模型,生产者与消费者处在不同的线程。如果生产者发出的事件能够立即被消费者处理,那是最好的。如果生产者发出的事件让消费者来不及处理,那就会导致事件越来越多,这个对内存以及整个模型的事件传递都是非常不好的。打个比方,一个厨师每分钟生产一个蛋糕,一个顾客每小时吃一个蛋糕,N久时间之后,蛋糕就越来越多。那怎么处理呢,餐厅给出以下方案:

        1、按步骤般一个一个来

        2、把最新生产的蛋糕丢弃

        3、把最早生产的蛋糕丢弃

        4、顾客想吃的时候,厨师才生产蛋糕,想吃多少就生产多少

        · · · · · ·

以上种种解决这种生产快于消费的策略就称为背压

        Rxjava中没有专门的操作符来处理背压,但是有专门的对象来处理可能需要背压的情况。RxJava的被观察者可以被分为Observable、Flowable、Single、Maybe、Completable这五大类,但是只有Observable和Flowable两大类能够生产多个事件传递给下游的观察者,也就是说只有他俩才有可能需要背压的处理。而Observable处理背压的情况就是通过toFlowable方法将自己转换成Flowable进行处理,所以总结如下:Flowable是专门用来处理背压的。

       Flowable与Observable在使用上面也差不多,但是create方法多了一个BackpressureStrategy参数,即背压策略的选择。

public enum BackpressureStrategy {
    MISSING,
    ERROR,
    BUFFER,
    DROP,
    LATEST;

    private BackpressureStrategy() {
    }
}

        这里提供了5种策略,其中MISSING是上游产生事件就立即传递到下游,其它几种策略都需要下游请求,才能收到事件。

他们的区别在于对生产事件的缓存处理。

        我们来看一下Flowable的观察者FlowableSubscriber

public interface FlowableSubscriber<T> extends Subscriber<T> {
    void onSubscribe(Subscription var1);
}

        这里的Subscription就是用来向上游请求事件下发的类,在需要的时候调用request方法请求下发的数量。


占坑,晚点再写。。。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值