В примере с обратным давлением в сети vertx, почему удаление наблюдаемого увеличения задержки? - PullRequest
0 голосов
/ 06 апреля 2020

В примере vertx-web противодавление , что делает observeOn(RxHelper.scheduler(vertx.getDelegate())) при условии, что я запускаю серверную вертикалку как стандартную вертикалку.

У меня 8 событий l oop потоков и 8 экземпляров серверной версии развернуты на 8-ядерном компьютере. Я не делаю блокировку вызовов ввода-вывода в обработчике маршрута

    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 Ответ

0 голосов
/ 08 апреля 2020

Может быть потому, что в результате вы получите планировщик по умолчанию, который не использует событие vertx l oop и действительно медленнее из-за использования нормальной модели потоков java. Если, конечно, вы не настроите стандартные планировщики rx java на событие l oop и пул блокирующих потоков с помощью вспомогательных методов из rxhelper.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...