订阅分为:同步订阅 异步订阅
同步订阅
Rxjava1与Rxjava2中 同步订阅没有用到缓冲区,只要上游事件数量不大于请求数量不会触发 MissingBackpressureException 异常,但是这种方式在数量多了以后会出现大量的内存使用率上升,有可能导致OOM。
同步订阅,存在问题,因为不存在缓冲区,发送事件超过接收事件抛出异常。这种可以通过 FlowableEmitter类的requested()控制被观察者发送速度,就是发送前先获取到观察者能接收多少个。
异步订阅
Rxjava1中的Observable与少量的操作符采用了背压处理。但是缓冲区的大小为16,如果上游数据超过16个同时发送事件会触发MissBackPressureException。
Rxjava2中的Observalbe不在支持背压策略。但是新增了Flowable支持背压策略。
相对同步订阅存在缓冲区,多发送的事件会被存在缓冲区。事件积压超过一定数量会抛出
MissingBackpressureException。
RxJava2采取了更先进的
背压策略
模式1:BackpressureStrategy.ERROR