Подтвердить что ты не робот

Сравнение реактивных структур Java

Я вижу много фреймворков/библиотек, которые утверждают, что могут помочь построить реактивные приложения на Java, такие как: Akka, Vert.x, RxJava, Reactor, QBit и т.д.

У них, похоже, разные подходы, возможности, плюсы, минусы и т.д. Я не мог найти подробные сравнения. Существует документация о каждом из этих кадров, но мне недостаточно понять различия.

В чем отличия между основными реактивными фреймами Java?

И каковы требования к приложениям, которые могут повлиять на выбор реактивной среды Java?

Спасибо за ваше время.

4b9b3361

Ответ 1

Я работаю над RxJava, и я недавно сделал несколько оценок в Akka-Streams и Reactor.

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

Я считаю, что RxJava является самым общим из всех, имеет нулевые зависимости от других библиотек и не уступает concurrency. Он очень популярен на Android в основном благодаря поддержке других библиотек/фреймворков, таких как Retrofit. В ветке 1.x не реализованы Reactive-Streams, но для нее есть обертки, тогда как 2.x является естественным Reactive-Streams (в настоящее время доступен в предварительном просмотре). На многих популярных языках программирования на основе JVM есть адаптеры для него (Scala, Kotlin, Clojure и т.д.).

Реактор соответствует требованиям Reactive-Streams, поскольку это более поздняя библиотека. У них есть зависимости/поддержка многих других библиотек. Они выбрали другой набор компромиссов, когда дело доходит до concurrency и очереди в потоках (т.е. LMAX Disruptor-style). Между ним и RxJava было несколько предложений относительно операторов, и мы начали говорить о наличии общего пула операторов.

Akka сильно доминирует в концепциях Scala; У меня была небольшая проблема с тем, чтобы он работал. Команда, стоявшая за ней, участвовала в разработке спецификации Reactive-Streams, и есть библиотека Akka-Streams, которая рекламируется для поддержки Reactive-Streams, однако доступ к ней является громоздким, потому что его свободный API сильно переплетается с актерской моделью Akka.

Если вы находитесь на стороне сервера/рабочего стола /Android, RxJava, как правило, является хорошим выбором (и я считаю, что он документально лучше других) и нацелен на высокопроизводительные асинхронные операции. Если вы больше на стороне латентности, Reactor может быть лучшим выбором. Я мало знаю об использовании Akka-Streams, но год назад я видел один тест, где веб-сервер, построенный вокруг Akka, превзошел Tomcat и Netty + RxJava.