2012-02-20 117 views
70

我發現那裏還有一個阿卡演員模型,所以我想知道阿卡的演員和斯卡拉的演員模型之間有什麼區別?阿卡的演員與斯卡拉的演員模型有什麼區別

+1

請參閱[斯卡拉中不同參與者實現之間的區別?](http://stackoverflow.com/q/5997018/53013) – 2012-02-24 16:31:29

+1

斯卡拉演員現在已被棄用,以支持阿卡演員,那麼爲什麼要麻煩? :) http://goo.gl/VaPOu – 2013-04-01 17:59:06

回答

54

好吧,沒有。只有Actor模型,Akka actors和Scala actors是該模型的兩個實現

所有演員模型認爲你的併發原語是演員,它可以:

  • 收到一條消息,並決定下一步根據郵件的內容,包括做什麼:

  • 發送消息任何演員,他們知道

  • 創建新的角色

,並提供一定的保障,例如:

  • 任何演員將一次只處理單個消息由演員X發送到演員ý

  • 消息將在順序大公到達被送往

斯卡拉和阿卡演員在這個級別上沒有區別。

有關它們可以做什麼的差異,請參閱Different Scala Actor Implementations Overview。對我而言,最大的一點是Akka支持主管和ActorRegistry。

+5

由接受的答案鏈接到的比較PDF似乎不再可用。以下是Akka開發人員的一個比較:http://akka.io/docs/misc/Comparison_between_4_actor_frameworks.pdf – Frank 2012-02-20 12:47:49

+5

您的鏈接也是404。這是目前的工作:http://doc.akka.io/docs/misc/Comparison_between_4_actor_frameworks.pdf – 2013-04-01 17:50:56

6

這取決於您對「模型」的含義 - 您可以參考「執行模型」或「編程模型」(也可能是其他模型)。

對於執行模型,基本上有兩種:基於線程的或基於事件的。 Scala標準角色庫包含兩者。基於線程的每個角色使用一個線程,而基於事件的使用線程池。前者更直觀易懂,後者效率更高。 Akka建立在基於事件的模型之上。

對於編程模型,scala標準庫和Akka有很大的區別。在scala標準庫中,你基本上實現了「run」方法 - 如果你想等待傳入的消息,你會進入一個等待狀態(通過調用「receive」或「react」)。所以,編程模型遵循「線程隱喻」。但是,在Akka中,編程隱喻是你實現了一些生命週期方法 - 但是「運行」方法寫在框架內部。事實證明,這種編程模型同樣適用於基於事件的執行模型。

如果你有興趣在斯卡拉標準的演員我已經就這個問題寫afewposts不同的執行模型和編程模型。

29

也有一個歷史的答案。斯卡拉的創造者認爲應該有一個演員的框架。喬納斯博內爾嘗試過,但並不完全滿意,所以他開始研究一種新的 - 演變成阿卡。然而,斯卡拉人認爲它比他們自己更好 - 所以在Jfokus 2011上他們宣佈Akka將成爲Scala的標準演員框架。但是,這種遷移需要一些時間。

+1

是的,斯卡拉演員圖書館已經在2.11棄用http://docs.scala-lang.org/overviews/core/actors -migration-guide.html – anshumans 2014-06-30 23:35:33