μ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,以便处理该消息。
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(); |
相关推荐
actor开源代码分享,actor开源代码分享,actor开源代码分享,actor开源代码分享
JActor 是一个 Java 的 Actor 模式的实现,经过测试在 i5 CPU 上可支持每秒钟发送超过亿条消息,可能是目前最快的。这相当于是 Scala 的 Actor 的纯 Java 版本。 示例代码: // Create a mailbox factory with a ...
NULL 博文链接:https://zhwj184.iteye.com/blog/1613351
Proto.Actor超快速,分布式,跨平台的actor。...其他实现:转到:https://github.com/AsynkronIT/protoactor-go Python(不稳定/ WIP):https://github.com/AsynkronIT/protoactor-python JavaScript(不稳定/ WIP):...
第二个实现是在Theatre actor系统之上实现的,该系统通过细粒度的资源控制确保更好的可扩展性和高性能计算。然后将这两种实现应用于标准基准数据集,这些数据集具有不同的人口规模和管理记录的分布、数据点的维度和...
Java actor API,带有 Akka 的实现。 它最初是一个使 Java Akka 更容易使用的库。 然而,通过它的演变,很明显 API 的客户端根本不需要依赖 Akka; 他们的需求可以通过对任何演员系统提供者通用的演员 API 来满足。...
java实现邮件邮件源码PCD-演员 一个模拟系统,抽象了 . 该系统必须被视为模拟,因为主要组件有意保留为抽象的。 系统的主要抽象类型如下: Actor :这个类型代表一个actor,它可以接收消息并做出相应的React Message...
python :包含Java actor调用的python模块。 绕过演员手柄 根据, ActorHandle可以在跨语言操作之间自动进行序列化和反序列化。 鉴于此,应该有可能将actor句柄传递给远程跨语言任务/ actor,以在远程代码中本地...
中文名: Java2游戏编程 原名: Java 2 Game Programming 作者: Thomas Petchel译者: 晏利斌 孙淑敏 邵荣 资源格式: PDF 版本: 扫描版 出版社: 清华大学出版社书号: 7302112932发行时间: 2005年08月 地区: 大陆 语言: ...
java类库源码actor-prolog-java-library 该存储库包含实现Actor Prolog逻辑语言的内置类的Java库的源代码。 该库在Actor Prolog至Java的翻译项目中使用。
基于 Lambda 的非阻塞 Actor 一个轻量级但灵活的并发API,从一开始就基于java lambdas.. Actor 可以看作是面向对象 (OO) 模型的扩展:虽然 OO 模型擅长保护私有字段和方法,但其默认的多线程同步通常很难正确实现。 ...
可以在这里找到C#实现 设计原则: 简约的API -API应该小巧且易于使用。 避免使用像容器和配置这样的企业级JVM。 以现有技术为基础-在这些技术的基础上,已经有很多伟大的技术,例如网络和集群。 例如用于联网的...
跨平台参与者在Go和C#之间引入了跨平台参与者的支持。 我可以用这个吗?...C#实现可在以下网址找到:https://github.com/AsynkronIT/protoactor-dotnet设计原则:简约API-该API应当小巧易用。 避免
Java 中 Akka 的简单生产者消费者示例 此存储库包含 3 个简单网络爬虫的示例: 一个连续的例子 将逻辑拆分为 3 个 Actor 的示例 页面的检索由多个 Actor 并行处理的示例。 检索失败且应用程序挂起的示例 重新发送...
Actor4j促销 引入了新颖的线程池体系结构,以提高参与者之间传递消息的性能。 此实现中的参与者没有自己的队列,它位于各自使用的线程(使用多个特定于任务的队列)上,并一起使用。 这样,避免了双重排队(线程的...
aktrs(pr:actors)是实现Actor模型的Java应用程序库。 它通过TCP套接字(和SSL套接字),参与者配置文件,控制台和可调日志记录来提供远程参与者。 它的API易于使用,其核心是用几行源代码编写的。 aktrs需要Java ...
在 C# 中实现类似 Akka 的 actor 模型。 工作正在进行中 样品 Pi 计算示例。 参考 演示文稿 阿卡 阿卡 2.0 演员 演员参考、路径和地址 Fork Join Pool 的可扩展性 Dispatchers理解底层 Akka 实现的关键概念 scala...
Actor对于PHPer来说,可能会比较陌生,写过Java的同学会比较熟悉,Java一直都有线程的概念(虽然PHP有Pthread,但不普及),它是一种非共享内存的并发模型,每个Actor内的数据独立存在,Actor之间通过消息传递的形式...