5

Я продолжаю изучать и пытаться использовать реактивный стиль кодирования с использованием Reactor и RxJava. Я понимаю, что реактивное кодирование улучшает использование процессора по сравнению с однопоточным исполнением.Преимущества/недостатки реактивного программирования

Есть ли какое-либо конкретное сравнение между реактивным программированием и императивным программированием в веб-приложениях?

Какова производительность, пропускная способность, которую я достигаю, используя реактивное программирование по нереактивному программированию?

В чем преимущества и недостатки реактивного программирования?

Есть ли какой-либо статистический тест?

ответ

8

Ну, реактивное программирование означает, что вы выполняете все связанные с IO задачи, такие как сетевые вызовы асинхронно. Например, ваше приложение вызывает внешний REST API или базу данных, вы можете выполнить этот вызов асинхронно. Если вы это сделаете, текущий поток не блокируется. Вы можете подавать множество запросов, просто создавая один или несколько потоков. Если вы следите за методом блокировки, вам нужно иметь один поток для обработки каждого запроса. Вы можете сослаться на мой пост в блоге с несколькими частями part one, part two и part three для получения дополнительной информации.

Помимо этого вы можете использовать обратные вызовы, чтобы сделать то же самое. Вы можете выполнять асинхронный вызов с помощью обратных вызовов. Но если вы это делаете, иногда вы можете оказаться в аддоне. Наличие одного обратного вызова внутри другого приводит к очень сложным кодам, которые очень трудно поддерживать. С другой стороны, RxJava дает вам возможность писать асинхронный код, который намного проще, удобнее и удобнее. Кроме того, RxJava предоставляет вам множество мощных операторов, таких как Map, Zip и т. Д., Что делает ваш код намного более простым, одновременно повышая производительность за счет параллельных исполнений различных задач, которые не зависят друг от друга.

RxJava не является другой реализацией Observer с множеством операторов, а дает вам хорошую обработку ошибок и механизмы повтора, которые действительно удобны.

Но я не проводил никаких проверок RxJava с императивным подходом к программированию, чтобы поблагодарить вас статистически. Но я уверен, что RxJava должен обеспечивать хорошую производительность по механизмам блокировки.

4

Помимо того, что они уже откликаются на отсутствие блокирующих функций, еще одна отличная функция для использования реактивной программы - важное использование противодавления. Обычно используется в ситуациях, когда ваш издатель дает больше информации, чем ваш потребитель может обрабатывать.

Таким образом, имея этот механизм, вы можете контролировать поток трафика между ними и избегать неприятных проблем с памятью.

Вы можете увидеть некоторые примеры Розыгрышей реактивного программирования здесь https://github.com/politrons/reactive

И о противодавлении здесь https://github.com/politrons/Akka/blob/master/src/main/scala/stream/BackPressure.scala

Кстати, единственный недостаток о реактивном программировании, является кривым обучение, потому что you're изменения парадигма программирования. Но в настоящее время все крупные компании уважать и следовать реакционно-Манифесте http://www.reactivemanifesto.org/

3

Недостатки

  • Более интенсивно использующих память для хранения потоков данных, в большинстве случаев (так как он основан на потоках с течением времени).
  • Может показаться нетронутым, чтобы учиться в начале (нужно, чтобы все было потоком).
  • Сложность должна быть решена во время объявления новых услуг.
  • Отсутствие хороших и простых ресурсов для изучения.

  • Часто путают, что эквивалентно функциональному реактивному программированию.

0

Реактивное программирование - это стиль микро-архитектуры, включающий интеллектуальную маршрутизацию и потребление событий.

Reactive - это то, что вы можете делать больше с меньшими затратами, в частности, вы можете обрабатывать более высокие нагрузки с меньшим количеством потоков.

Реактивные типы не предназначены для ускорения обработки ваших запросов или данных. Их сила заключается в том, что они могут одновременно обслуживать больше запросов и более эффективно обрабатывать операции с задержкой, такие как запрос данных с удаленного сервера, более эффективно ,

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

От
https://blog.redelastic.com/what-is-reactive-programming-bc9fa7f4a7fc https://spring.io/blog/2016/06/07/notes-on-reactive-programming-part-i-the-reactive-landscape https://spring.io/blog/2016/07/28/reactive-programming-with-spring-5-0-m1