Spring Webflux - Почему он такой быстрый?

Поділитися
Вставка
  • Опубліковано 8 лют 2025
  • Разбираемся почему WebClient от SpringWebflux работает в 20 раз быстрее обычного http-клиента.

КОМЕНТАРІ • 18

  • @KonstantDev
    @KonstantDev 10 місяців тому +1

    Спасибо за понятное объяснение!

  • @milordplus
    @milordplus Рік тому +1

    Крутой пример, крутое объяснение! Спасибо!!!

  • @Akio_F
    @Akio_F 7 місяців тому

    Ёмкая наглядная демонстрация, спасибо!

  • @АлександрБугримов-о1е

    Спасибо за видео! Вообще супер )

  • @pulato000
    @pulato000 3 роки тому +3

    Extremely interesting! Plz countinue

  • @alexandersmirnov4274
    @alexandersmirnov4274 2 роки тому

    супер можете еще снять видео с разбором оператора groupby

  • @VadimBryksin
    @VadimBryksin Рік тому +2

    Странно, только что закончил перф-тест последнего (3.0.3) Spring Boot MVC vs Spring Boot WebFlux - и как-то результаты совсем не порадовали...
    вот что получилось
    Throughput/s:
    Non-DB Calls (Actuator helath/info)
    MVC: 310.17
    WebFlux: 225.94
    With DB Calls (create / get)
    MVC: 115.51
    WebFlux (+R2DBC): 33.50
    получилось что WebFlux аж в 4 раза медленнее чем MVC, я ожидал все на оборот

    • @СтасРусаков-т2э
      @СтасРусаков-т2э Рік тому +1

      Тоже никак не могу получить эту обещанную производительность( Ни db, ни походы на api. Ничего не выигрывает у MVC. Уже устал искать где я ошибаюсь. Методы максимально коробочные - без какой либо моей логики. Чисто вызов webClient/Repository

    • @nyrhog3740
      @nyrhog3740 Рік тому +1

      Товарищ тоже тестил и тоже подметил, что прироста скорости нет. Может разве что по памяти будет выгоднее, что тредов меньше крутится, но такое

    • @alexshpaq
      @alexshpaq Рік тому +3

      Это же основа асинхронного выполнения - асинхронное выполнение всегда медленнее обычного синхронного, потому операция переключения потоков далеко не бесплатная, плюс создание объектов Mono и Flux тоже не бесплатные. Но в асинхронном выполнении минимизируется время простоя потоков, то есть если потоку требуется прождать где-то секунду или несколько, например дождаться ответа от другого сервера, то в синхронном программировании поток будет просто ждать, а в асинхронном поток не ждёт, и может заняться обработкой других вещей - например параллельно отправить другой запрос, или что-то подсчитать. Это очень полезно, потому что практически везде используются пулы потоков с ограниченным количеством потоков, и многие не знают, как увеличить тот или иной пул потоков, плюс вообще то каждый поток по умолчанию тратит 1МБ памяти под стек и приложение с 1000 потоков будет потреблять 1ГБ памяти только для потоков

  • @ram0973
    @ram0973 2 роки тому

    А время отклика от 1 запроса в спринге с webflux при малой нагрузке быстрее? Чем в обычном спринге?

    • @Bomber765
      @Bomber765  2 роки тому +2

      Разницы нет. За время отклика отвечает сервер, т.к. он отдает веб-страницу. И делает он это всегда одинаково, независимо от того, кто у него запрашивают страницу - webflux или обычный httpClient. Если нагрузка маленькая то лучше использовать httpClient, т.к. код будет проще как для написания так и для отладки

  • @iKorvik
    @iKorvik Рік тому +2

    Ммм, чел сравнил многопоточность с однопоточностью и решил, что это заслуги вебфлакса. А прикол реактивного программирования вообще не в этом. То, что ты сделал, это обычная многопоточность.

    • @Bomber765
      @Bomber765  Рік тому

      Нет, ты ошибаешься.
      В данном примере будет использован 1 main поток + io потоки netty (их число равно числу ядер). Итого, на 8-ядерной машине одновременное скачивание 256 страниц будет обеспечено 9 потоками. Это не многопоточка.
      Попробуй в 9 потоков скачать с помощью синхронного http-клиента 1000 страниц, и посмотри сколько у тебя уйдет времени. Гарантирую что удивишься.

    • @flamencoag
      @flamencoag 11 місяців тому

      Но ведь действительно эта асинхронность достигается через выполнение задачи в отдельном потоке. А поскольку вы запускаете много таких задач, то и получается многопоточность.
      Вообще я почти уверен, что если сделать загрузки через многопоточность, используя обычный http клиент, то результат будет как на webflux

    • @Bomber765
      @Bomber765  11 місяців тому +1

      @@flamencoag​​⁠​⁠​⁠ это сравнение я делаю в начале видео. Можете пересмотреть и увидеть разницу в скорости 3:51

    • @МаксимСеменченко-ы9ъ
      @МаксимСеменченко-ы9ъ 7 місяців тому +1

      @@flamencoag Так тут нет многопоточности. Тут ассинхронность. Мы просто избегаем блокировки при выполнении. Ты при многопоточности такого не добьешься, один поток это примерно 1мб, 256 потоков, удачи.

  • @xandrviking1113
    @xandrviking1113 Рік тому

    Супер 👍