Java并发,Akka和RxJava之间的区别?

Posted

技术标签:

【中文标题】Java并发,Akka和RxJava之间的区别?【英文标题】:Difference between Java Concurrency, Akka and RxJava? 【发布时间】:2015-02-16 00:23:58 【问题描述】:

今天我发现,对于 java 中的并发,我们有像 Akka 这样的良好框架,而且我还发现,有一个像 RxJava 这样的反应式编程框架,用于在应用程序中执行 multithreading。但我还是一头雾水!为什么两者都比Java Concurrency 框架好?

现在响应式编程是成熟的话题,大多数语言都支持Functional Reactive Programing,比如Netflix,为不止一种语言提供关于Reactive programming的API。 Rxjava 是用于javascala 等的api 之一。根据RxJava,他们在内部使用actors 来维护multithreadingAkka 也使用Actors 进行multithreading 编程.

那么,AkkaReactive Programming 方法有什么区别,为什么它们比 Java Concurrency 好?

【问题讨论】:

不清楚;最终,选择这个或那个解决方案取决于您的需求。 好的,但是哪种方法好,反应式编程,akka 或 java 并发?因为他们都提供multithreading 没有通用的“好方法”;只做你熟悉和/或想做的事。就个人而言,我只是使用 JDK 提供的东西,因为它足以满足我的需求,仅此而已。 好吧,我不知道我是否是一个“优秀的开发人员”,但我不会推荐任何一个,因为我不使用它们,也不需要它们。就并发而言,您想(购买和)阅读 Brian Goetz 的“Java Concurrency In Practice”。 是的,我有这本书,这本书真的很棒,我不是说你不是good developer。对不起,如果我喜欢你。但进化是发展的一部分。我仍然想知道,为什么我们更喜欢它们。 【参考方案1】:

根据 Mathias Doenitz 的说法,此时 RxJava 没有与 Akkas Reactive Streams 实现不同的背压。但 RxJava 似乎正在努力增加背压。

两个框架都将能够通过反应式流式传输 spi 进行交互。 所以你将能够做非常非常相似的事情。根据 Mathias 的说法,不同之处在于 Akka 实现是基于内部的 actor,而不是多线程。因此性能会更高。

我的这些信息来源是 a talk,这是 Mathias 上周在荷兰 Scala 用户组提供的。

编辑:我支持 RxJava 中的背压支持。如果您关注 Eriks 链接,您可以阅读背压的含义。

【讨论】:

"根据 Mathias Doenitz 的说法,此时 RxJava 没有背压" 这实际上是不正确的; github.com/ReactiveX/RxJava/wiki/Backpressure rxJava2.x 有背压支持。【参考方案2】:

基于actors的Akka Streams提供actors和流之间的互操作,例如:

从 actor 读取并将其传递给流和 从流中读取并将其传递给演员

【讨论】:

以上是关于Java并发,Akka和RxJava之间的区别?的主要内容,如果未能解决你的问题,请参考以下文章

Java反应式框架的比较[关闭]

在akka演员中前进和讲述之间的区别

Scala并发框架Akka原理详解

Apache Spark vs Akka [关闭]

在项目反应堆或 akka 流中,接收器和订阅者之间的概念区别是啥?

AKKA文档2.2(java)——术语,概念