【问题标题】:In vertx-web backpressure example, why does removing observeOn increase latency?在 vertx-web 背压示例中,为什么删除 observeOn 会增加延迟?
【发布时间】:2020-04-06 09:35:28
【问题描述】:

vertx-web backpressure example中,observeOn(RxHelper.scheduler(vertx.getDelegate()))做了什么,假设我启动Server verticle作为标准verticle。

我在 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);
      });

【问题讨论】:

    标签: vert.x vertx-verticle


    【解决方案1】:

    也许是因为那样你最终会使用默认调度程序,它不使用 vertx 事件循环,并且由于使用 java 的正常线程模型而确实更慢。当然,除非您使用 rxhelper 的辅助方法将 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

    【讨论】:

    • 我已经配置了默认的 RxJava 调度器。 observeOn(RxHelper.scheduler 不应该使用事件循环线程本身吗?
    猜你喜欢
    • 2023-01-22
    • 1970-01-01
    • 2012-11-10
    • 1970-01-01
    • 2018-03-08
    • 2023-04-04
    • 2020-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多