Что ж, реактивное программирование означает, что вы выполняете все свои задачи, связанные с вводом-выводом, такие как сетевые вызовы, асинхронно. Например, скажем, ваше приложение вызывает внешний REST API или базу данных, вы можете сделать этот вызов асинхронно. Если вы это сделаете, ваш текущий поток не блокируется. Вы можете обслуживать множество запросов, просто создав один или несколько потоков. Если вы следуете блокирующему подходу, вам нужно иметь один поток для обработки каждого запроса. Вы можете сослаться на мою запись в блоге, состоящую из нескольких частей, первую часть, вторая часть и часть третья для получения дополнительных сведений.
Помимо этого, вы можете использовать обратные вызовы, чтобы сделать то же самое. Вы можете выполнять асинхронный вызов, используя обратные вызовы. Но если вы это сделаете, иногда вы можете столкнуться с адом обратного вызова. Наличие одного обратного вызова внутри другого приводит к очень сложным кодам, которые очень трудно поддерживать. С другой стороны, RxJava предоставляет вам возможность писать асинхронный код, который намного проще, удобнее и удобнее для чтения. Также RxJava предоставляет вам множество мощных операторов, таких как Map, Zip и т. Д., Которые делают ваш код намного более простым, одновременно повышая производительность за счет параллельного выполнения различных задач, которые не зависят друг от друга.
RxJava не является еще одной реализацией Observer с набором операторов, а дает вам хорошую обработку ошибок и механизмы повтора, которые действительно удобны.
Но я не проводил никаких тестов производительности RxJava с императивным подходом к программированию, чтобы похвалить вас статистически. Но я почти уверен, что RxJava должен давать хорошую производительность по сравнению с механизмами блокировки.
Обновить
Поскольку со временем я накопил больше опыта, я подумал о том, чтобы добавить больше баллов к своему ответу.
Основываясь на статье, ReactiveX - это библиотека для создания асинхронных программ, основанных на событиях, с использованием наблюдаемых последовательностей. Я считаю, что вы в первую очередь прочтете эту вводную статью.
Вот некоторые свойства реактивных систем: управляемость событиями, масштабируемость, отказоустойчивость, отзывчивость.
Когда дело доходит до RxJava, он предлагает программисту две основные возможности. Во-первых, он предлагает хороший составной API с использованием богатого набора операторов, таких как zip, concat, map и т. Д. Это дает более простой и читаемый код. Когда дело доходит до кода, читаемость и простота - важнейшие свойства. Во-вторых, он предоставляет отличные абстракции, которые делают параллелизм декларативным.
Популярное заблуждение состоит в том, что Rx по умолчанию является многопоточным. Если честно, Rx по умолчанию однопоточный. Если вы хотите делать что-то асинхронно, вы должны указать это явно, используя операторы subscribeOn
и observeOn
, передав соответствующие планировщики. RxJava предоставляет пулы потоков для выполнения асинхронных задач. Есть много планировщиков, таких как ввод-вывод, вычисление и так далее. Планировщик ввода-вывода, как следует из названия, лучше всего подходит для задач с интенсивным вводом-выводом, таких как сетевые вызовы и т. Д. Напротив, планировщик вычислений хорош для более интенсивных вычислительных задач. Вы также можете подключить свои собственные службы Executor к RxJava. Встроенные планировщики в основном помогают вам избавиться от поддержки ваших собственных служб Executor, делая ваш код более простым.
Напоследок пару слов о подписке и наблюдении
В мире Rx обычно есть две вещи, для которых вы хотите контролировать модель параллелизма:
- Вызов подписки
- Наблюдение за уведомлениями
SubscribeOn: укажите планировщик, на котором будет работать Observable.
ObserveOn: укажите планировщик, на котором наблюдатель будет наблюдать за этим Observable
person
Ravindra Ranwala
schedule
06.02.2017