2010-07-28 18 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調用。