阿卡的演员与斯卡拉的演员模型有什么区别

我发现还有一个阿卡演员模型,所以我想知道阿卡的演员和斯卡拉的演员模型之间有什么区别?

那么,没有。 只有Actor模型,Akka actors和Scala actors是这个模型的两个实现

所有Actor模型都说你的并发原语是actors,它可以:

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

  • 发送消息给他们知道的任何演员

  • 创造新的演员

并提供某些保证,例如:

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

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

斯卡拉和阿卡演员在这个层面上没有区别。

有关它们可以做什么的区别,请参阅不同的Scala Actor实现概述 。 对我来说最大的一个就是Akka支持主pipe和ActorRegistry。

还有一个历史的答案。 斯卡拉的创造者认为应该有一个演员的框架。 乔纳斯·博内尔(JonasBonér)尝试过,但并不完全满意,所以他开始研究新的 – 演变成阿卡。 然而,斯卡拉人认为它比自己更好 – 所以在Jfokus 2011年,他们宣布阿卡将成为斯卡拉的标准演员框架。 但是,这种迁移将需要一些时间。

这取决于“模型”的含义,您可以参考“执行模型”或“编程模型”(也可能是其他模型)。

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

对于编程模型,scala标准库和Akka有很大的区别。 在scala标准库中,你基本上实现了“运行”方法 – 如果你想等待传入的消息,你会进入一个等待状态(通过调用“receive”或“react”)。 所以,编程模型遵循“线程隐喻”。 然而,在Akka中,编程的隐喻是你实现了一些生命周期方法 – 但是“运行”方法是写在框架内的。 事实上,这个编程模型在基于事件的执行模型方面效果更好。

如果你对scala标准angular色的不同执行模型和编程模型感兴趣,我已经写了 一些关于这个问题的文章。