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

在vertx web背压示例中,为什么删除observeOn会增加延迟?

梁丘霖
2023-03-14

在vertx web backpressure示例中,假设我作为标准verticle启动服务器verticle,那么observeOn(RxHelper.scheduler(vertx.getDelegate())会做什么。

我在一台8核机器上部署了8个事件循环线程和8个Server verticle实例,我没有在路由的处理程序中阻止IO调用

    server.requestStream()
      .toFlowable()
      .map(HttpServerRequest::pause)
      .onBackpressureDrop(req -> req.response().setStatusCode(503).end())
      .observeOn(RxHelper.scheduler(vertx.getDelegate())) // Why does removing this line increase CPU and latency?
      .subscribe(req -> {
        req.resume();
        router.accept(req);
      });

共有1个答案

乐正浩言
2023-03-14

也许是因为你最终会使用默认的调度程序,它不使用vertx事件循环,而且由于使用java的正常线程模型,速度确实很慢。当然,除非您使用rxhelper的helper方法将rxjava的默认调度程序配置到事件循环和阻塞线程池。

RxJavaPlugins.setComputationSchedulerHandler(s -> RxHelper.scheduler(vertx));
RxJavaPlugins.setIoSchedulerHandler(s -> RxHelper.blockingScheduler(vertx));
RxJavaPlugins.setNewThreadSchedulerHandler(s -> RxHelper.scheduler(vertx));

文档:https://vertx.io/docs/vertx-rx/java2/#_scheduler_support

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

  • 我正在我的网站上实现懒惰加载,但出于某种原因,当图像完全加载并显示时,图像位置会发生变化。 我曾尝试重新安排调用js和css文件的位置,但没有成功。 https://jsfiddle.net/f3q01ha5/3/ 这是没有懒惰加载和我想要的背景位置: 我已经附加了JSFIDLE,但请注意,我无法在这个网站上运行惰性加载,但在本地运行良好。 无论我是否使用延迟加载程序,我都希望背景图像加载到相同的

  • 我在计算一个简单蒸汽的最大值,结果是: (S11000,S1,值:999) (S12000,S1,值:41) 最后一行数据明显迟到了: 为什么按第一个窗口(0-1000)计算? 我认为第一个窗口应该在到达时触发。 对于这个结果,我很疑惑。 MyReductingMax(),MyWindowFunction()

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

  • 如果您的集群已经在运行,你可以在运行时添加或删除 OSD 。 增加 OSD 你迟早要扩容集群, Ceph 允许在运行时增加 OSD 。在 Ceph 里,一个 OSD 一般是一个 ceph-osd 守护进程,它运行在硬盘之上,如果你有多个硬盘,可以给每个硬盘启动一个 ceph-osd 守护进程。 通常,你应该监控集群容量,看是否达到了容量上限,因为达到了它的 near full 比率后,要增加一或多

  • 问题内容: 我创建了一个html错误页面。它有2行显示错误。第二行链接到主页。为了使两行保持在中心,我创建了一个顶层并将网格的每一行都设为a 。我注意到,如果我用于第二行,则链接周围没有任何空格,但是如果删除,该空格将被添加,即html从变为。 如果删除属性,为什么会添加空格? 码 html CSS 问题答案: 这是因为flexbox删除或元素之间的默认空白。 这是没有flexbox的代码,其中有