2010-07-28 19 views
65

Java(和JVM语言)有很多不同的Actor model实现。哪个Actor用于Java的模型库/框架?

许多Actor库和框架已经实现,以允许Java中的Actor风格编程(没有Actor内置)。我认为Actor模型具有很大的优势,但是Java的选择是压倒性的!

有人可以发布最流行的和提供一些洞察到哪些使用?根据每秒传递的消息,哪些产品具有吞吐量基准?

+3

看不到它是如何重复http://stackoverflow.com/questions/436050/events-in-java,除了其中一个答案是“演员”。第一种是死的(没有提到Kilim,Akka或Jetlang)。 – 2010-07-28 22:06:51

+0

也搜索“[java] actors” – oluies 2010-07-29 07:28:52

+2

我有一个很酷的:https://github.com/RuedigerMoeller/kontraktor – 2014-05-09 21:21:12

回答

60

This是一篇很好的文章系列。演示文稿请​​参阅this。 Carl Hewitt解释了演员模型here的本质。

KillimAkka(scala)具有最佳性能。我会建议使用Akka。 Starting with Scala 2.11.0,Scala Actors库已弃用。已经在Scala 2.10.0中默认的actor库是Akka。如果您不想在Scala中完成所有编码,请使用akka作为前端并调用您的java代码。 Scala和Akka有非常好的语法和API。 Akka有一个名为“活动对象”的Java API。请注意,现在Akka发生了很多事情,因此代码库正在快速移动。请参阅Java getting started doc

Killim是基于java的编译器,但编译时编织。

JetlangFunctionalJava是不会执行编译时织(??不确定)选项,但不是一样快,阿卡和Killim(没有这方面的最新数据,但也有一些旧号码Jonas Boners and Viktor Klangs talk at Scala Days 2010)。

其他选项是使用常规的JMS(或其他一些MQ/PubSub)。你也可以做your own simple内部JVM发布渠道/工作者。或者只是使用java util concurrent的ExecutorService或com.google.common.util.concurrent

其它基于Scala的框架/用演员的实现库StambeccoLiftScalaz

其他类似型号是Hazlecast Distributed Executor Service,Oracle Coherence与InvocableService,GigaSpaces执行程序或IBM eXtreme Scale。但是这些在一定程度上缺少了“演员是系统”的部分。

+4

另外值得一提的是,Akka有一个Java API(活动对象) – 2010-07-28 23:25:52

+1

add Reactor和RxJava – 2015-03-18 15:34:11

+2

也注意Vert.x – 2016-11-03 10:24:14

1

斯卡拉演员是我最好的建议。

查看http://www.scala-lang.org/node/242的简短教程。

+0

可以在Java中使用Scala Actor吗? (我仍然很欣赏使用JVM的答案。) – 2010-07-28 20:52:43

+2

Scala是100%兼容JVM的语言,因此,您可以在Java中使用它。 – 2010-07-28 21:25:27

+1

我认为你应该说“使用它与Java”。例如,从Scala调用Java并从Java调用Scala很容易。 但它只是另一个jar文件:http://blog.lostlake.org/index.php?/archives/73-For-all-you-know,-its-just-another-Java-library。 html – oluies 2010-07-28 22:01:40

1

嗯,我在斯卡拉寻找一个好的演员实施,看着斯卡拉和阿卡。我发现这些都过于复杂。然后我找到了电梯演员,我找到了简单,优雅和精心设计。以上所有内容都可以从Java使用(通过Java友好的命名方法)。

讨论在:http://erikengbrecht.blogspot.com/2009/06/pondering-actor-design-trades.html

下载:http://liftweb.net/

你只需要抬起,演员_ ?.罐子和升降共同_ ?.罐子从电梯下载(加上Scala的标准库)。看看升降机演员斯卡拉来源:非常整洁。

11

Jumi Actors是Java的演员库。它被设计成在Java代码中使用是自然的 - 你不需要为每条消息创建一个类,但是消息在接口上被表示为方法。它的演员也是垃圾收集,所以他们不需要明确停止。使用Jumi Actor的代码是testable,这两个单元都是可测试的,没有actors容器,可以使用确定性的单线程容器实现进行集成测试。

Akka Actors相比,二进制大小(33 KB vs 10+ MB)要小得多,而且要快得多。看看the Pi example in Akka Tutorialthe same example using Jumi Actors,与Akka计算大约需要480-520毫秒,但与Jumi演员只有350-390毫秒。 (如果演员不做任何工作,我们将仅测量消息传递,这种差异无疑会更大。)在比较启动性能时,启动Akka容器需要620 ms,但启动Jumi Actors容器只需要25 ms。

3

另一种选择是GPars。基于Groovy,但可以像Java一样从Java调用。