美文网首页
RxJava背压

RxJava背压

作者: 陈晓松快点跑 | 来源:发表于2018-10-04 23:51 被阅读0次

订阅分为:同步订阅 异步订阅

同步订阅Rxjava1与Rxjava2中 同步订阅没有用到缓冲区,只要上游事件数量不大于请求数量不会触发 MissingBackpressureException 异常,但是这种方式在数量多了以后会出现大量的内存使用率上升,有可能导致OOM。

同步订阅,存在问题,因为不存在缓冲区,发送事件超过接收事件抛出异常。这种可以通过 FlowableEmitter类的requested()控制被观察者发送速度,就是发送前先获取到观察者能接收多少个。异步订阅Rxjava1中的Observable与少量的操作符采用了背压处理。但是缓冲区的大小为16,如果上游数据超过16个同时发送事件会触发MissBackPressureException。

Rxjava2中的Observalbe不在支持背压策略。但是新增了Flowable支持背压策略。相对同步订阅存在缓冲区,多发送的事件会被存在缓冲区。事件积压超过一定数量会抛出MissingBackpressureException。

RxJava2采取了更先进的背压

策略模式1:BackpressureStrategy.ERROR 

问题:发送事件速度 > 接收事件 速度,即流速不匹配具体

表现:出现当缓存区大小存满(默认缓存区大小 = 128)、被观察者仍然继续发送下1个事件时

处理方式:直接抛出异常MissingBackpressureException


模式2:BackpressureStrategy.MISSING

问题:发送事件速度 > 接收事件 速度,即流速不匹配

具体表现是:出现当缓存区大小存满(默认缓存区大小 = 128)、被观察者仍然继续发送下1个事件时

处理方式:友好提示:缓存区满了


模式3:BackpressureStrategy.BUFFER

问题:发送事件速度 > 接收事件 速度,即流速不匹配

具体表现是:出现当缓存区大小存满(默认缓存区大小 = 128)、被观察者仍然继续发送下1个事件时

处理方式:将缓存区大小设置成无限大 即被观察者可无限发送事件观察者,但实际上是存放在缓存区 但要注意内存情况,防止出现OOM


模式4: BackpressureStrategy.DROP

问题:发送事件速度 > 接收事件 速度,即流速不匹配

具体表现是:出现当缓存区大小存满(默认缓存区大小 = 128)、被观察者仍然继续发送下1个事件时

处理方式:超过缓存区大小(128)的事件丢弃 如发送了150个事件,仅保存第1 - 第128个事件,第129 -第150事件将被丢弃


模式5:BackpressureStrategy.LATEST

问题:发送事件速度 > 接收事件 速度,即流速不匹配

具体表现是:出现当缓存区大小存满(默认缓存区大小 = 128)、被观察者仍然继续发送下1个事件时

处理方式:只保存最新(最后)事件,超过缓存区大小(128)的事件丢弃 即如果发送了150个事件,缓存区里会保存129个事件(第1-第128 + 第150事件)

相关文章

  • RxJava背压

    订阅分为:同步订阅 异步订阅 同步订阅Rxjava1与Rxjava2中 同步订阅没有用到缓冲区,只要上游事件数量不...

  • RxJava背压

    RxJava 当我们在对RxJava从1.0版本升级到2.0版本的时候,我们发现RxJava2.0增加了一个被观察...

  • RxJava2背压管理策略实例解析

    1、前言: 在使用RxJava 的背压时,遇到了很多困扰。本文主要是针对RxJava背压策略的5种模式下,观察者和...

  • Rxjava的背压

    一、什么是背压? 被观察者与观察者通过subscribe()订阅并使用异步后,一般上游发射一条数据下游就会...

  • Rxjava系列(七) RxJava2.0背压原理解析

    RxJava2.0有一个很大的特色是背压的支持,如果要使用背压的话需要使用 Flowable。为什么需要背压这种机...

  • RxJava基础总结

    1.本文仅基于RxJava2.0、Retrofit2.0(引入背压) 当下Rxjava,Retrofit已成项目标...

  • 背压-BackPressure

    2016-09-23 14:00 最近更新了RxJava2,看到了新增的Flowable支持背压。什么是背压呢? ...

  • RxJava2--Flowable与BackPress

    转载自:Rxjava2入门教程五:Flowable背压支持——对Flowable最全面而详细的讲解 背压介绍 当上...

  • RxJava2.0背压与不背压

    RxJava是什么? 一个基于观察者模式(事件流)的异步任务库。可以很简洁地完成一个异步任务,当任务复杂时也能清晰...

  • 关于 RxJava2 backpressure的一些理解

    RxJava2 中的背压 在RxJava2里,引入了Flowable这个类来处理backpressure,而Obs...

网友评论

      本文标题:RxJava背压

      本文链接:https://www.haomeiwen.com/subject/hcufaftx.html