0

vertx-web 背压示例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);
      });
4

1 回答 1

0

也许是因为那样你最终会使用不使用 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

于 2020-04-08T20:14:03.317 回答