当前位置: 首页 > 知识库问答 >
问题:

Rxjava中的“背压”是什么意思?

赫连正初
2023-03-14

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

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

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

共有3个答案

何兴邦
2023-03-14

考虑一种情况,你有大量的数据,例如,传感器发射大量的数据,这些数据以很高的速度发射。
在这种情况下,我们需要回压,简单地说,这只是一种处理无法处理的项目的方法。
现在为了减轻这种压力,我们明确指定了不同的回压策略,如

  • 丢弃(BackpressureStragy.DROP):当无法处理超过其容量的物品时,此策略会丢弃物品
  • Latest(backpressureStragy.Latest):如果下游无法处理项目流,它将停止排放,并等待再次可用。除了最后一个到达并在下游可用时发送最后一个项目外,它会不断丢弃项目
  • 缓冲区(backpressureStragy.Buffer):将项目保存在缓冲区中,直到可以处理它们

在优步工程(Uber Engineering)消除Android上RxJava的反压力

柳涵映
2023-03-14

我读了很多关于背压的文章,但是没有什么能让我满意,直到我看到乔纳斯(反应宣言的合著者)的一篇帖子。我希望这能澄清你对背压的怀疑。

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

柴良哲
2023-03-14

RxJava背压

当你有一个可观察到的东西,它的发射速度如此之快,以至于消费者无法跟上导致存在发射但未消费物品的流动。

如何管理和控制由可观察对象发出但未被订阅者消费的未消费项,是背压策略要解决的问题。

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

更多信息参考链接

 类似资料:
  • 背压有问题。使用发布主题获取发射时的传感器事件,并需要在事务中订阅主题时将数据保存到数据库。 我一直在尝试使用。窗口(100)操作符,这样每当我连续收到100个传感器事件时,我就可以批量插入,但一次只能收到一个项目。订阅 不希望使用缓冲区运算符删除事件。正确的处理方法是什么?

  • 我使用RxJava观察点击几个按钮。 这些订阅将在一个对象上调用不同的函数,这需要几毫秒的时间。这些功能是同步的。 问题是,当按下太多按钮时,会出现背压异常。对我来说,有效的方法是删除几个输入(最好是旧的输入)。RxJava有可能做到这一点吗?

  • 我试图创建一个,它会发出关于反压力的事件,以避免内存问题,同时并行运行转换的每个阶段以提高效率。我创建了一个简单的测试程序,来解释我的程序的不同步骤的行为,以及何时发出事件,何时等待不同的阶段。 我的程序如下: 当我运行这个程序时,我得到了与预期背压相关的输出,其中一批事件被发送到

  • 我读了一些RxJava中的背压文档,但我找不到详细的解释,比如它是如何在库中内部发生的,每个人都只是总结说“生产者”太快,“消费者”太慢。 例如,如下面的代码: 我已经看过了RxJava源代码,所以我的理解是,在主线程中,我们将每毫秒发出一次事件,一旦发出,我们就将值传递给系统。出来println(i)方法,并将其扔进newhead调度器的线程池,然后在可运行程序中运行该方法。 所以我的问题是,异

  • 问题内容: 我们什么时候应该使用doOnNext()可观察的,而不是仅仅onNext()? 问题答案: 用于副作用:您想在流的中间步骤(例如,在过滤流之前)对流的中间步骤中的项目排放做出反应(例如,对数),用于横向行为(例如记录),但您仍希望该值向下传播流。 更最终,它消耗了价值。

  • 问题内容: 我试图在Python 3.3中使用旧的库(可追溯至2003年!)。当我导入它时,Python抛出错误,因为源文件中有符号,例如: 我猜这是该语言现在被放弃的标志。 它到底是什么意思,我应该用哪个(较新的)符号代替? 问题答案: 这意味着不等于。它取自(python的前身)此处: 订单测试(表示 “不等于” ) 我相信它是从Pascal那里获得的,Pascal是Guido开始使用的语言。