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
是用于java
、scala
等的api 之一。根据RxJava
,他们在内部使用actors 来维护multithreading
和Akka
也使用Actors
进行multithreading
编程.
那么,Akka
和 Reactive 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之间的区别?的主要内容,如果未能解决你的问题,请参考以下文章