什么术语"背压"在Rxjava意味着什么?

时间:2017-10-01 23:57:15

标签: rx-java reactive-programming backpressure

我是RxJava的初学者,我很好奇" backpressure" 的含义。

这是否意味着生产者给消费者带来压力?

或者这是否意味着消费者对生产者施加压力? (相反方向的压力)

3 个答案:

答案 0 :(得分:5)

RxJava Backpressure

当你有一个可观察物品发出如此之快的物品时,消费者无法跟上导致已发射但未消耗物品存在的流量。

背景压力策略处理的是由观察者发出但未被订阅者消费的未消耗物品如何被管理和控制。

由于需要系统资源来处理背压,因此您需要选择适合您需求的正确背压策略。

More Info ref link

答案 1 :(得分:1)

考虑一种情况,例如您有大量数据。传感器会发射大量数据,并以高速率发射。
在这种情况下,我们需要反压,用简单的话来说就是处理无法处理的项目的一种方式
现在,为了缓解这种压力,我们明确指定了不同的反压策略,例如

  • 删除(BackpressureStrategy.DROP):此策略删除项目,
    当它处理不了容量时
  • 最新(BackpressureStrategy.LATEST):如果下游无法应对物料流,它将停止排放并等到它 再次可用。除了最后一个项目,它一直在删除项目 一个到达并发送最后一个,当下游是 可用。
  • 缓冲区(BackpressureStrategy.BUFFER):将项目保存在缓冲区中,直到可以处理为止。

Demystifying RxJava Backpressure on Android at Uber Engineering

答案 2 :(得分:0)

我读了很多有关背压的信息,但是直到我遇到Jonas(反应式宣言的共同作者)的帖子时,我才满意。我希望这可以澄清您对背压的怀疑。

  

当一个组件努力跟上时,整个系统   需要以明智的方式做出回应。这是不可接受的   处于压力下的组件会灾难性地失败或将消息放入   不受控制的时尚。既然不能应付,就不可能失败   应向上游传达其承受压力的事实   组件,以减少负担。这个背压是   重要的反馈机制,可让系统正常运行   对负载做出反应而不是在负载下崩溃。背压可能   一直到用户级联,此时响应能力可能   降级,但是这种机制将确保系统具有弹性   负载,并将提供可能允许系统使用的信息   本身以应用其他资源来帮助分配负载,请参阅   弹性。