不同的Scala Actor实现概述

我试图find“正确”的演员实施。 我意识到有一堆他们,挑一个有点混乱。 就我个人而言,我对远程演员特别感兴趣,但是我认为一个完整的概述会对其他人有所帮助。 这是一个相当普遍的问题,所以请随时回答你所知道的实现。

我知道下面的Scala Actor实现(SAI)。 请添加缺less的。

  • 斯卡拉2.7(区别于)
  • 斯卡拉2.8
  • Akka( http://www.akkasource.org/ )
  • 电梯( http://liftweb.net/ )
  • Scalaz( http://code.google.com/p/scalaz/ )


  • 这些SAI的目标用例是什么(轻量级与“重”的企业级框架)?

  • 他们是否支持远程演员? 远程参与者在SAI中有什么缺点?
  • 他们的performance如何?
  • 社区有多活跃?
  • 他们开始有多容易? 文档有多好?
  • 他们有多容易延伸?
  • 他们有多稳定? 哪些项目正在使用它们?
  • 他们有什么缺点?
  • 他们的devise原则是什么?
    • 他们是基于线程还是基于事件(接收/反应)还是两者?
    • 嵌套接收
    • 热衷于演员的消息循环

从Scala 2.10开始 ,Scala演员现在已经被弃用了,现在Akka Actor已经成为了标准发布的一部分

斯卡拉2.7.7。 vs 2.8之后Scala 2.8.0 RC3发行版 :

新反应堆提供更轻量级,纯粹的基于事件的演员与可选隐式发送者标识。 增加了对具有守护进程式语义的参与者的支持。 可以将Actorconfiguration为使用高效的JSR166y分支/连接池,从而在1.6 JVM上显着提高性能。 调度程序现在可以插入,并且更容易定制。

还有一个Haller的devise文档: Scala Actor:统一基于线程和基于事件的编程

据我所知,只有斯卡拉和阿卡支持远程演员。

Akka由scalablesolutions提供支持,它提供商业支持和插件。 Akka似乎是一个重量级的解决scheme,它的目标是与现有框架(骆驼,AMQP,JTA,Comet,Spring,Redis)以及STM和持久性的整合。

Akka与Scala相比不支持嵌套接收,但是支持对参与者的消息循环进行热身,同时拥有基于线程和基于事件的参与者,以及所谓的“基于事件的单线程”参与者。

我意识到,阿卡执行彻底的比赛。 所以即使技术上受到期待的部分function,function也不能偏。 这意味着你必须立即处理每个消息。