Java并发、Akka和RxJava之间的区别是什么?

39
今天我发现在Java中处理并发有很好的框架如Akka,同时也发现了像RxJava这样的响应式编程框架用于应用中的多线程处理。但是我仍然感到困惑!为什么它们都比Java Concurrency框架更好?
如今,响应式编程是一个成熟的话题,并且大多数语言都支持Functional Reactive Programing,像Netflix提供的API关于Reactive programming的支持涵盖了多种语言。Rxjava是其中之一,可用于javascala等。根据RxJava,他们在内部使用演员来维护多线程,而Akka也使用演员进行多线程编程。
那么,AkkaReactive Programming方法之间有什么区别,它们为什么比Java Concurrency好?

3
不清楚;最终,选择这种或那种解决方案取决于您的需求。 - fge
好的,但哪种方法更好,反应式编程、Akka还是Java并发?因为它们都提供了“多线程”。 - Harmeet Singh Taara
没有通用的“好方法”;只需使用你熟悉和/或想要使用的。个人而言,我只使用JDK提供的内容,因为它对我的需求来说已经足够了,仅此而已。 - fge
@fge,问题在于为什么akka响应式编程现在如此受欢迎?大多数优秀的开发人员建议采用响应式方法。 - Harmeet Singh Taara
1
我不知道自己是否是一位“优秀的开发者”,但我不会推荐任何一个工具,因为我不使用它们也不需要它们。至于并发性方面,建议阅读Brian Goetz的《Java并发实践》(Java Concurrency In Practice)。 - fge
1
是的,我有这本书,这本书真的很棒,我并不是说你不是一个“好开发者”。如果我伤害了你,我很抱歉。但是进化是开发的一部分。我仍然想知道为什么我们更喜欢它们。 - Harmeet Singh Taara
2个回答

23

据Mathias Doenitz称,目前RxJava没有背压能力,而Akkas反应流实现中有背压。但是RxJava似乎正在努力添加背压功能。

这两个框架都可以通过反应式流spi进行交互。因此,你可以做非常相似的事情。据Mathias说,区别在于Akkas实现是基于Actor内部的,而不是多线程。因此性能更佳。

我获得这些信息的来源是Mathias上周在荷兰Scala用户组的一次演讲

编辑:关于RxJava的背压支持,我做出了更正。如果您遵循Eriks链接,您可以了解什么是背压。


3
据Mathias Doenitz所说,此时RxJava没有背压(back pressure)功能。但这是事实上不正确的;请参考https://github.com/ReactiveX/RxJava/wiki/Backpressure。 - headinthebox
1
rxJava2.x 支持背压。 - happyyangyuan
RxJava 也不是基于多线程的。请更新答案以准确反映当前现实。追加编辑注释会产生误导。 - Charlie

1
Akka Streams基于actor,提供了actor和流之间的互操作性,例如:
  • 从actor读取并将其传递给流
  • 从流中读取并将其传递给actor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接