actor Java 实现
2016-03-10 16:05
465 查看
μJavaActors 是 actor 系统的一个简单的 Java 实现。只有 1,200 行代码,μJavaActors 虽然很小,但很强大。在下面的练习中,您将学习如何使用 μJavaActors 动态地创建和管理 actor,将消息传送给它们。
μJavaActors 围绕 3 个核心界面而构建:
消息 是在 actor 之间发送的消息。
μJavaActors 包的默认消息类是
ActorManager 是一个 actor 管理器。它负责向 actor 分配线程(进而分配处理器)来处理消息。
在大部分程序中,只有一个
Actor 是一个执行单元,一次处理一条消息。
每个 actor 有一个
每个 actor 属于一个
只要
大部分程序都有许多 actor,这些 actor 常常具有不同的类型。actor 可在程序启动时创建或在程序执行时创建(和销毁)。本文中的 actor 包 包含一个名为
图 1 显示了 actor 之间的关系。每个 actor 可向其他 actor 发送消息。这些消息保存在一个消息队列(也称为邮箱;从概念上讲,每个 actor 有一个队列,当
图 1. actor 之间的关系
JActor 是一个 Java 的 Actor 模式的实现,经过测试在 i5 CPU 上可支持每秒钟发送超过亿条消息,可能是目前最快的。这相当于是 Scala 的 Actor 的纯 Java 版本。
示例代码:
?
μJavaActors 围绕 3 个核心界面而构建:
消息 是在 actor 之间发送的消息。
Message是 3 个(可选的)值和一些行为的容器:
source是发送 actor。
subject是定义消息含义的字符串(也称为命令)。
data是消息的任何参数数据;通常是一个映射、列表或数组。参数可以是要处理和/或其他 actor 要与之交互的数据。
subjectMatches()检查消息主题是否与字符串或正则表达式匹配。
μJavaActors 包的默认消息类是
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 限制支持的挂起消息数量;此方法可用于预防不受控制地发送。
大部分程序都有许多 actor,这些 actor 常常具有不同的类型。actor 可在程序启动时创建或在程序执行时创建(和销毁)。本文中的 actor 包 包含一个名为
AbstractActor的抽象类,actor 实现基于该类。
图 1 显示了 actor 之间的关系。每个 actor 可向其他 actor 发送消息。这些消息保存在一个消息队列(也称为邮箱;从概念上讲,每个 actor 有一个队列,当
ActorManager看到某个线程可用于处理消息时,就会从队列中删除该消息,并将它传送给在线程下运行的 actor,以便处理该消息。
图 1. actor 之间的关系
JActor 是一个 Java 的 Actor 模式的实现,经过测试在 i5 CPU 上可支持每秒钟发送超过亿条消息,可能是目前最快的。这相当于是 Scala 的 Actor 的纯 Java 版本。
示例代码:
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | // Create a mailbox factory with a pool of 10 threads. MailboxFactory mailboxFactory = JAMailboxFactory.newMailboxFactory( 10 ); // Create and initialize a Test actor. Mailbox mailbox = mailboxFactory.createAsyncMailbox(); //.createMailbox(); MyActor actor = new MyActor(); actor.initialize(mailbox); // Send a MyRequest request and wait for completion. JAFuture future = new JAFuture(); long ct = System.currentTimeMillis(); System.out.println(MyRequest.req.send(future, actor)); // Shut down the thread pool. mailboxFactory.close(); |
相关文章推荐
- Java开源分词系统IKAnalyzer学习(七) 词库加载分词
- Java彻底删除环境变量设置无效
- Java中URI,URL和URN的使用
- java rmi 两种方式 固定端口设置
- [置顶] SpringSecurity 源码分析一
- Java多线程 阻塞队列和并发集合
- 或许被我们遗忘的JAVA Math类
- 100万并发连接服务器笔记之Java Netty处理1M连接会怎么样
- [置顶] Struts2 的token原理
- java 调 pro*c
- 面向GC的Java编程
- java.util.ResourceBundle使用详解
- ElasticSearch中设置排序Java
- Bigpipe学习笔记和java版实现
- 如何在eclipse jee中创建Maven project并且转换为Dynamic web project
- java rmi 防火墙
- Java EE 8 将支持 SSE 服务器端事件
- java tjws
- Hbase访问方式之Java API
- spring 多数据源 事物