Akka的Actor与Scala的Actor模型有什么区别


76

我发现还有Akka演员模型,所以我想知道Akka的演员模型和Scala的演员模型之间有什么区别?



1
现在不赞成使用Scala演员,而推荐使用Akka演员,那么为什么还要打扰呢?:) goo.gl/VaPOu
Gian Marco

从开始Scala 2.10scala.actors图书馆就弃用了Akka演员。
约翰尼,

Answers:


59

好吧,没有。只有Actor模型,而Akka actor和Scala actor是该模型的两个实现

所有Actor模型都说您的并发原语是actor,可以:

  • 接收一条消息并根据消息的内容决定下一步该怎么做,包括:

  • 向他们认识的任何演员发送消息

  • 创建新演员

并提供某些保证,例如:

  • 任何演员一次只能处理一条消息

  • 演员X发送给演员Y的消息将按照发送的顺序到达

在这一级别上,Scala和Akka演员之间没有区别。

有关其功能的差异,请参见《不同的Scala Actor实施概述》。对我而言,最大的问题是Akka支持主管和ActorRegistry。


6
由接受的答案链接到的比较PDF似乎不再可用。这是来自Akka开发人员之一的比较:akka.io/docs/misc/Comparison_between_4_actor_frameworks.pdf
Frank

7
您的链接也是404。当前正在运行:doc.akka.io/docs/misc/Comparison_between_4_actor_frameworks.pdf
Gian Marco

32

还有一个历史答案。Scala的创建者认为应该有一个参与者框架。乔纳斯·博内(JonasBonér)进行了尝试,但并不完全满意,因此他开始研究一种新产品-后来演变成Akka。但是,Scala人认为它比自己的要好-因此在Jfokus 2011上,他们宣布Akka将成为Scala的标准演员框架。但是,该迁移将需要一些时间。



7

这在某种程度上取决于您对“模型”的含义-您可以引用“执行模型”或“编程模型”(也可能是其他模型)。

对于执行模型,基本上有两种:基于线程或基于事件。Scala标准actor库包含两者。基于线程的线程为每个参与者使用一个线程,而基于事件的线程使用线程池。前者更直观易懂,后者更有效。Akka建立在基于事件的模型上。

对于编程模型,scala标准库和Akka之间存在很大差异。在scala标准库中,您基本上实现了“运行”方法-如果要等待传入的消息,则将自己置于等待状态(通过调用“接收”或“反应”)。因此,编程模型遵循“线程隐喻”。但是,在Akka中,编程的隐喻是您实现了一些生命周期方法-但是“运行”方法是在框架内部编写的。实际上,事实证明,该编程模型与基于事件的执行模型一起也可以更好地工作。

如果你有兴趣在不同的执行模型和Scala标准的演员编程模型我已经写了一个 职位上的问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.