Почему разница в производительности между Flux.range и Flux.range (). Flatmap (Flux.range ())? - PullRequest
0 голосов
/ 06 мая 2020

Я использую весенний веб-клиент на основе netty для инициирования массивных HTTP-запросов, предполагая:

total = page * cnt

здесь total - общий запрос.

Один из вариантов - использовать Flux.range(1, total) как:

    @RequestMapping(value = "/tid1", method = RequestMethod.GET)
    public Mono<String> total(@RequestParam(value = "total") Integer total) {
        long ms = System.currentTimeMillis();
        return Flux.range(1, total)
                .flatmap(n -> {
                    // WebClient POST request here
                })
                .then(Mono.just(total))
                .map(n -> {
                    long ms1 = System.currentTimeMillis();
                    long du = n * 1000 / (ms1-ms);
                    String res = "Num: " + n + ", QPS: " + du;
                    log.error(res);
                    return res;
                })
                ;
    }

Другой вариант - разбить total на page страницы, каждая страница принимает cnt запросов:

    @RequestMapping(value = "/tid", method = RequestMethod.GET)
    public Mono<String> paging(@RequestParam(value = "page") Integer page, @RequestParam(value = "cnt") Integer cnt) {
        long ms = System.currentTimeMillis();
        return Flux.range(1, page)
                .flatMap(n -> {
                    return Flux.range(1, cnt)
                            .flatMap(k -> {
                                // WebClient POST request here
                            });
                })
                .then(Mono.just(cnt * page))
                .map(n -> {
                    long ms1 = System.currentTimeMillis();
                    long du = n * 1000 / (ms1-ms);
                    String res = "Num: " + n + ", QPS: " + du;
                    log.error(res);
                    return res;
                })
        ;
    }

I обнаружил, что производительность между этими вариантами сильно различается, первый имеет 12500 QPS, а второй 7000 QPS (QPS - это количество запросов, обработанных за одну секунду).

К сожалению, я должен использовать пейджинг решение, и мне интересно, почему эти два подхода так сильно различаются?

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