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模型使用响应式消息传输模式,可编写出具有高性能、高响应性、高可伸缩性和高韧性的并发应用程序。《响应式架构:消息模式Actor实现与Scala、Akka应用集成》由10章构成,详细介绍了使用Actor模型中的响应式...
Skynet的核心部分不到3000行C代码,利用actor模式充分利用单机多核的优势,尽量将业务逻辑进行并行处理。相对于Erlang,它更注重单台物理机的性能挖掘,并可以让程序员使用更熟悉的开发语言进行开发。本次议题将介绍...
通过Actor模型使用响应式消息传输模式,可编写出具有高性能、高响应性、高可伸缩性和高韧性的并发应用程序。本书由10章构成,详细介绍了使用Actor模型中响应式消息传输模式的理论和实用技巧。其中包括:Actor模型和...
libGDX的Actor类的最基本实现,同时应该使用Stage对Actor的子类进行draw(),这点需注意。而其实,Actor只需要对draw()方法进行覆盖即可,然后使用Stage进行加载,而Actor的其他方法只是为了丰富Actor子类的方法...
消息模式Actor实现与Scala、Akka应用集成
响应式架构++消息模式Actor实现与Scala.Akka应用集成+,沃恩·弗农+
响应式架构 消息模式Actor实现与Scala.Akka应用集成_沃恩·弗农_PDF:PDF电子版_2016.07_417_14043812的电子版。
毕设&课设基于actor模式的软件通信总线构建机器人上位机控制软件,可与ROS通信A robot remote client using LabVIEW. 包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据...
ga_server 基于protoactor框架的actor游戏服务器
响应式架构 消息模式Actor实现与Scala.Akka应用集成 高清扫描版
除非为了在Actor Core.vi的中不断监视或输送某些值,当然此时就需要解决如何在适当时刻停止while循环的问题了。本例中未予以演示,但可以从本例的全局变量的g_bool中得到参考,while循环到底应该在何时被结束。
响应式架构 消息模式Actor实现与Scala.Akka应用集成 ,沃恩·弗农
2. 注册EventHandler到InitiationDispatcher中,每个EventHandler包含对相应Handle的引用,从而建立Handle到
LabVIEW Actor 框架 示例文件 通过示例,详细介绍了Actor的使用。
使用Actor处理高并发。易于测试。服务的插件管理。高性能,可伸缩的Java Tcp服务器架构,1.Avalon基于Akka构建的服务器核心。天生分布式基因便于横向拓展;2.网络部分使用Netty;3.服务器分为单服务器和多节点分布式...
赠送jar包:akka-actor_2.11-2.5.19.jar; 赠送原API文档:akka-actor_2.11-2.5.19-javadoc.jar; 赠送源代码:akka-actor_2.11-2.5.19-sources.jar; 赠送Maven依赖信息文件:akka-actor_2.11-2.5.19.pom; 包含...