http://www.javaworld.com/article/2078020/java-concurrency/understanding-actor-concurrency-part-2-actors-on-the-jvm.html
Finally, we look at the Jetlang library, which technically does not provide an actor framework but rather a set of building blocks from which actor-like functionality (as well as other architectures) can be assembled. Jetlang is based on the older Retlang library for .NET.
Jetlang has three primary concepts:
-
Fiber
- a lightweight thread-like construct
-
Channel
- a way to pass messages between Fiber
s
-
Callback
- a function to be invoked when a message arrives on a Channel
in the context of a Fiber
These building blocks are enough to assemble the concept of an actor. I created an Actor
class, shown in Listing 8, that holds a Fiber
, a Channel
to use as an inbox, and a Callback
function to call when messages arrive in the inbox. It also provides a send()
method to put a message on the actor's inbox queue.
Listing 8. An actor in Jetlang
public class Actor<T> {
private final Channel<T> inbox;
private final Fiber fiber;
private final Callback<T> callbackFunction;
public Actor(Fiber fiber, Channel<T> inbox, Callback<T> callbackFunction) {
this.fiber = fiber;
this.inbox = inbox;
this.callbackFunction = callbackFunction;
}
public Channel<T> inbox() {
return this.inbox;
}
public Fiber fiber() {
return this.fiber;
}
public Callback<T> callbackFunction() {
return this.callbackFunction;
}
public void send(T message) {
this.inbox.publish(message);
}
}
I then created an ActorFactory, shown in Listing 9, that can be used to create new actors from a Callback
function. This simplifies the process of obtaining a Fiber
and creating the Actor
.
Listing 9. ActorFactory
public class ActorFactory {
private final ExecutorService threads;
private final PoolFiberFactory fiberFactory;
public ActorFactory() {
threads = Executors.newCachedThreadPool();
fiberFactory = new PoolFiberFactory(threads);
}
public Fiber startFiber() {
Fiber fiber = fiberFactory.create();
fiber.start();
return fiber;
}
public <T> Channel<T> createInbox() {
return new MemoryChannel<T>();
}
public <T> Actor<T> createActor(Callback<T> actorCallback) {
Fiber fiber = startFiber();
Channel<T> inbox = createInbox();
inbox.subscribe(fiber, actorCallback);
return new Actor<T>(fiber, inbox, actorCallback);
}
}
The actor classes are then defined as a Callback
, as in Listing 10.
Listing 10. Jetlang Player callback function
public class Player implements Callback<PlayMessage> {
private final String name;
public Player(String name) {
this.name = name;
}
public void onMessage(PlayMessage message) {
message.getResponseActor().send(
new ThrowMessage(name, randomMove()));
}
// etc
}
分享到:
相关推荐
JActor 是一个 Java 的 Actor 模式的实现,经过测试在 i5 CPU 上可支持每秒钟发送超过亿条消息,可能是目前最快的。这相当于是 Scala 的 Actor 的纯 Java 版本。 示例代码: // Create a mailbox factory with a ...
在"响应式架构 消息模式Actor实现与Scala.Akka应用集成"这个主题中,我们可以深入学习如何使用Scala和Akka构建响应式的系统。这可能包括以下知识点: 1. Actor系统的创建和配置:理解如何在Scala中初始化一个Akka ...
通过Actor模型使用响应式消息传输模式,可编写出具有高性能、高响应性、高可伸缩性和高韧性的并发应用程序。《响应式架构:消息模式Actor实现与Scala、Akka应用集成》由10章构成,详细介绍了使用Actor模型中的响应式...
Skynet的核心部分不到3000行C代码,利用actor模式充分利用单机多核的优势,尽量将业务逻辑进行并行处理。相对于Erlang,它更注重单台物理机的性能挖掘,并可以让程序员使用更熟悉的开发语言进行开发。本次议题将介绍...
在具体实现上,`Reactor`模式通常使用`select`、`poll`或`epoll`等I/O多路复用技术,而`Proactor`模式则依赖于系统级别的异步I/O支持,如Windows的IOCP,或者在Linux中可以使用AIO(Asynchronous I/O)库。...
在这个主题中,我们将深入探讨消息模式下的Actor实现,以及如何在Scala中利用Akka框架进行应用集成。 首先,让我们理解什么是Actor模型。Actor模型是并发计算的一种理论框架,由Carl Hewitt在1973年提出。在该模型...
根据提供的文件信息,我们可以提炼出几个关键知识点,重点聚焦于“响应式架构”、“消息模式Actor”以及“Scala”和“Akka应用集成”。虽然提供的内容部分并非技术性内容,而是与电子版图书获取相关的信息,但我们仍...
通过阅读这本书,开发者不仅可以学习到如何使用Scala和Akka构建响应式系统,还能理解如何利用消息模式和Actor模型来解决并发问题,提升系统的弹性和可靠性。对于想要深入理解并发编程和分布式系统的人来说,这是一本...
《Go-gaserver:基于Protoactor框架的Actor游戏服务器详解》 在当今的网络游戏开发领域,高性能、可扩展性以及良好的并发处理能力是服务器端架构的关键要素。Go-gaserver项目,作为一个基于Protoactor框架的游戏...
libGDX的Actor类的最基本实现,同时应该使用Stage对Actor的子类进行draw(),这点需注意。而其实,Actor只需要对draw()方法进行覆盖即可,然后使用Stage进行加载,而Actor的其他方法只是为了丰富Actor子类的方法...
本项目是一款基于actor模式的软件通信总线构建的机器人上位机控制软件源码,共计932个文件,涵盖Python、C++、Shell等多种编程语言。其中,包含317个vi文件、218个aiml文件、68个py文件、62个lvclass文件、44个ipynb...
标题中的"C++ actor framework样例"指的是使用CAF库编写的C++代码示例,这些示例展示了如何在实际应用中利用CAF的基本功能。这包括消息的发送、接收以及处理,这些都是actor模型中的关键操作。 描述中提到的"消息...
"Actor-Critic原理+PPO算法推导" Actor-Critic 原理是强化学习中的一种重要方法,主要用于解决 Sequential Decision Making 问题。该方法结合了 Actor 网络和 Critic 网络,Actor 网络负责选择动作,而 Critic 网络...
毕设&课设基于actor模式的软件通信总线构建机器人上位机控制软件,可与ROS通信A robot remote client using LabVIEW. 包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据...
除非为了在Actor Core.vi的中不断监视或输送某些值,当然此时就需要解决如何在适当时刻停止while循环的问题了。本例中未予以演示,但可以从本例的全局变量的g_bool中得到参考,while循环到底应该在何时被结束。
这个代码库可能包含了类库、示例代码以及相关的文档,用于指导开发者如何在IBM的环境中使用Actor模型来构建高并发的应用。 在深入研究这个开源项目时,我们可能会学习到以下知识点: 1. **Actor的基本概念**:理解...