actor系统的Java实现 μJavaActors
jopen
12年前
μJavaActors 是 actor 系统的一个简单的 Java 实现。只有 1,200 行代码,μJavaActors 虽然很小,但很强大。在下面的练习中,您将学习如何使用 μJavaActors 动态地创建和管理 actor,将消息传送给它们。
μJavaActors 围绕 3 个核心界面而构建:
- 消息 是在 actor 之间发送的消息。
Message
是 3 个(可选的)值和一些行为的容器:source
是发送 actor。subject
是定义消息含义的字符串(也称为命令)。data
是消息的任何参数数据;通常是一个映射、列表或数组。参数可以是要处理和/或其他 actor 要与之交互的数据。subjectMatches()
检查消息主题是否与字符串或正则表达式匹配。
DefaultMessage
。 - ActorManager 是一个 actor 管理器。它负责向 actor 分配线程(进而分配处理器)来处理消息。
ActorManager
拥有以下关键行为或特征:createActor()
创建一个 actor 并将它与此管理器相关联。startActor()
启动一个 actor。detachActor()
停止一个 actor 并将它与此管理器断开。send()/broadcast()
将一条消息发送给一个 actor、一组 actor、一个类别中的任何 actor 或所有 actor。
ActorManager
,但如果您希望管理多个线程和/或 actor 池,也可以有多个ActorManager
。此接口的默认实现是DefaultActorManager
。 - Actor 是一个执行单元,一次处理一条消息。
Actor
具有以下关键行为或特征:- 每个 actor 有一个
name
,该名称在每个ActorManager
中必须是惟一的。 - 每个 actor 属于一个
category
;类别是一种向一组 actor 中的一个成员发送消息的方式。一个 actor 一次只能属于一个类别。 - 只要
ActorManager
可以提供一个执行 actor 的线程,系统就会调用receive()
。为了保持最高效率,actor 应该迅速处理消息,而不要进入漫长的等待状态(比如等待人为输入)。 willReceive()
允许 actor 过滤潜在的消息主题。peek()
允许该 actor 和其他 actor 查看是否存在挂起的消息(或许是为了选择主题)。remove()
允许该 actor 和其他 actor 删除或取消任何尚未处理的消息。getMessageCount()
允许该 actor 和其他 actor 获取挂起的消息数量。getMaxMessageCount()
允许 actor 限制支持的挂起消息数量;此方法可用于预防不受控制地发送。
AbstractActor
的抽象类,actor 实现基于该类。 - 每个 actor 有一个
图 1 显示了 actor 之间的关系。每个 actor 可向其他 actor 发送消息。这些消息保存在一个消息队列(也称为邮箱;从概念上讲,每个 actor 有一个队列,当 ActorManager
看到某个线程可用于处理消息时,就会从队列中删除该消息,并将它传送给在线程下运行的 actor,以便处理该消息。
来自 IBM DW