簡體   English   中英

Akka的演員與Scala的演員模型有什么不同

[英]What's the difference of the Akka's Actor with Scala's Actor model

我發現還有一個Akka演員模型,所以我想知道Akka的演員和Scala的演員模特之間有什么區別?

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

所有Actor模型都說你的並發原語是actor,它可以:

  • 根據消息內容接收消息並決定下一步該做什么,包括:

  • 向他們了解的任何演員發送消息

  • 創造新的演員

並提供某些保證,例如:

  • 任何演員一次只能處理一條消息

  • 演員X發送給演員Y的消息將按照發送的順序到達

Scala和Akka演員在這個級別上沒有區別。

有關它們可以執行的操作的差異 ,請參閱不同的Scala Actor實現概述 對我來說最大的一點就是Akka支持主管和ActorRegistry。

還有一個歷史答案。 Scala的創建者認為應該有一個actor框架。 JonasBonér試了一下,但並不完全滿意,所以他開始研究一種新的 - 它演變成了Akka。 然而,Scala人認為它比他們自己更好 - 所以在Jfokus 2011他們宣布Akka將成為Scala的標准演員框架。 但是,遷移需要一些時間。

這取決於你對“模型”的意思 - 你可以參考“執行模型”或“編程模型”(也可能是其他模型)。

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

對於編程模型,scala標准庫和Akka之間存在很大差異。 在scala標准庫中,您基本上實現了“run”方法 - 如果您想等待傳入消息,您將進入等待狀態(通過調用“receive”或“react”)。 因此,編程模型遵循“線程隱喻”。 然而,在Akka中,編程隱喻是你實現了一些生命周期方法 - 但是“run”方法是在框架內部編寫的。 事實證明,這種編程模型也可以通過基於事件的執行模型更好地工作。

如果您對scala標准演員的不同執行模型和編程模型感興趣,我已就此問題撰寫 幾篇 文章

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM