经典 Actor 模型

经典 Actor 模型

Akka

Akka 致力于将具有行业实力的 Actor 模型引入 JVM 运行时,以弥补 JVM 本身未设计任何对 Actor 的支持;Akka 最早是基于 Scala Actors,不过后来 其更迭的速度远胜于 Scala Actors。Akka 为 Actor 提供了具有 Java 和 Scala 绑定的编程接口,该接口看起来类似于 Scala Actors,但是在处理消息的方式上具有不同的语义。

Akka 的接收操作定义了一个全局消息处理程序,该处理程序不会在收到不匹配的消息时阻止,而是仅在可以处理匹配的消息时才触发。如果没有匹配的模式来处理消息,它也不会在 Actor 的邮箱中留下消息。该消息将被简单地丢弃,并将事件发布到系统。Akka 的接口还提供了更强的封装,以避免暴露对 Actor 的直接引用。Akka actor 具有有限的 ActorRef 接口,该接口仅提供用于向其 actor 发送消息或将消息转发到其 actor 的方法,此外还要进行检查以确保在创建 actor 之后无法直接访问 Actor 子类的实例。在某种程度上,这解决了 Scala Actors 中可能会在 actor 上调用公共方法的问题,从而打破了程序员对消息传递的期望。这个系统不是完美的,但是在大多数情况下,它限制了程序员仅使用有限的接口将消息发送给参与者。

与 Scala Actor 相比,Akka 运行时还提供了性能优势。运行时对参与者处理的许多或所有消息使用单个连续关闭,并提供更改此全局连续的方法。与 Scala Actors 的延续模型使用控制流异常会导致额外的开销相比,可以在 JVM 上更有效地实现此功能。此外,非阻塞消息插入和任务计划操作用于提高性能。Akka 是经典 Actor 模型血统的生产就绪结果。它是积极开发并实际用于构建可伸缩系统的。本章稍后将详细介绍 Akka 的生产用法。Akka 已经足够成功,已被移植到其他语言/运行时。有一个 Akka.NET 项目,使用 C# 和 F# 将 Akka 编程模型引入 .NET 和 Mono。Akka 甚至已作为基于 Scala.js 的 Akka.js 移植到 JavaScript。

上一页
下一页