这个答案真的不是我的。 It was produced Viktor Klang(Akka 成名)在 David Pollak(Lift 成名)、Jason Zaugg(Scalaz 成名)、Philipp Haller(Scala Actors 成名)的帮助下。
我在这里所做的只是格式化它(如果 Stack Overflow 支持表,这会更容易)。
有几个地方等我有空的时候再补上。
设计理念
版本控制
Scalaz 演员 电梯演员 Scala 演员 Akka 演员
当前稳定版本。 5 2.1 2.9.0 0.10
最小 Scala 版本。 2.8 2.7.7 2.8
最低 Java 版本。 1.5 1.5 1.6
演员模型支持
Scalaz 演员 电梯演员 Scala 演员 Akka 演员
产生新演员 是 是 是 是
演员内心
发送消息到 是 是 是 是
知名演员
改变行为 Actors 是 Yes Yes: 嵌套 Yes:
对于下一条消息不可变反应/接收成为/不成为
监督 未提供 否 演员:是,是
(link/trapExit) 反应堆:否
状态隔离级别
如果用户在
他们的演员,他们可以从
外面?
- Scalaz 演员:不适用。演员是一个密封的特质。
- 电梯演员:是的
- Scala 演员:是的
- Akka Actors:不,actor 实例被屏蔽在 ActorRef 后面。
演员类型
- Scalaz 演员:
Actor[A] extends A => ()
- 电梯演员:
LiftActor, SpecializeLiftActor[T]
- Scala 演员:
Reactor[T]、Actor extends Reactor[Any]
- Akka 演员:
Actor[Any]
演员生命周期管理
Scalaz 演员 电梯演员 Scala 演员 Akka 演员
手动启动 否 否 是 是
手动停止 否 否 否 是
Restart-on-failure 不适用 是 是 可按参与者实例配置
重新启动语义 n/a 重新运行 actor 通过重新分配将 actor 恢复到稳定状态并
行为丢弃旧实例
重新启动可配置性 不适用 不适用 X 次,Y 时间内 X 次
提供生命周期钩子 没有生命周期行为 preStart、postStop、preRestart、postRestart
消息发送模式
Scalaz 演员 电梯演员 Scala 演员 Akka 演员
火忘记了!消息演员!味精演员!味精演员参考!味精
一个消息)
发送 - 接收 - 回复(见 1)演员!?味精演员!?味精演员参考!味精
演员!!味精
发送 - 接收 - 未来(见 2)演员!味精演员参考!味精
发送承诺结果(消息)。 future.onComplete(f => to !f.result)
未来(演员)
用 actor comap f 组合 actor 否 否 否
功能(见 3)
(1) 任何函数 f 都成为这样的参与者:
val a: Msg => Promise[Rep] = f.promise
val reply: Rep = a(msg).get
(2) 任何函数 f 都成为这样的参与者:
val a = f.promise
val replyFuture = a(message)
(3) 逆变函子:actor comap f。还有Promise中的Kleisli作文。
消息回复模式
待定
Scalaz 演员 电梯演员 Scala 演员 Akka 演员
回复消息中的发件人
回复消息
消息处理
支持嵌套接收?
- Scalaz 演员:--
- 电梯演员:是的(稍微用手编码)。
- Scala Actors:是的,基于线程的接收和基于事件的反应。
- Akka Actors:不,嵌套接收会随着时间的推移导致内存泄漏和性能下降。
消息执行机制
待定
Scalaz 演员 电梯演员 Scala 演员 Akka 演员
执行机制名称
执行机制是
可配置
执行机制可以
在每个参与者的基础上指定
执行机制的生命周期
必须明确管理
每个actor执行线程
机制
事件驱动的执行机制
邮箱类型
支持临时邮箱
支持持久邮箱
分布/远程参与者
Scalaz 演员 电梯演员 Scala 演员 Akka 演员
透明遥控器 不适用 否 是 是
演员
传输协议 n/a n/a Java Akka 远程协议
序列化(TCP 之上的 Protobuf)
在 TCP 之上
动态集群 不适用 不适用 不适用 在商业产品中
操作方法
待定
Scalaz 演员 电梯演员 Scala 演员 Akka 演员
定义演员
创建一个演员实例
启动一个actor实例
停止一个actor实例