25

我是 RxJava 的初学者,我很好奇“背压”的含义。

这是否意味着生产者背着消费者施加压力?

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

4

3 回答 3

23

RxJava 背压

当您有一个 observable 发出项目的速度如此之快以至于消费者无法跟上导致已发出但未消费的项目存在的流程时。

由 observables 发出但未由订阅者消费的未消费项目如何管理和控制是背压策略处理的。

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

更多信息参考链接

于 2018-03-07T07:29:27.077 回答
6

考虑一下您拥有大量数据的情况,例如。传感器发出大量数据,这些数据以高速率发出。
在这种情况下,我们需要背压,简单地说,它只是一种处理无法处理的项目的方法
现在为了缓解这种压力,我们明确指定了不同的背压策略,例如

  • Dropping (BackpressureStrategy.DROP) :
    当它不能处理超过它的容量时,这个策略会丢弃物品
  • 最新 (BackpressureStrategy.LATEST) :如果下游无法应对项目的流动,它会停止发射并等待它再次可用。它不断丢弃项目,除了最后一个到达并在下游可用时发送最后一个。
  • 缓冲区(BackpressureStrategy.BUFFER):将项目保存在缓冲区中,直到它们可以被处理。

在 Uber Engineering 上揭秘 Android 上的 RxJava 背压

于 2019-10-26T11:27:47.153 回答
6

我读过很多关于背压的文章,但直到我看到Jonas(反应宣言的合著者)的一篇文章之前,我都没有感到满意。我希望这能澄清您对背压的疑虑。

当一个组件难以跟上时,整个系统需要以一种明智的方式做出响应。承受压力的组件发生灾难性故障或以不受控制的方式丢弃消息是不可接受的。由于它不能应付并且不能失败,它应该向上游组件传达它承受压力的事实,从而让它们减少负载。这种背压是一种重要的反馈机制,它允许系统优雅地响应负载,而不是在负载下崩溃。背压可能会一直级联到用户,此时响应能力可能会降低,但这种机制将确保系统在负载下具有弹性,并将提供可能允许系统本身应用其他资源来帮助的信息分配负载,请参阅弹性。

于 2019-10-23T06:20:23.937 回答