actor

Scala语言学习四-akka actor

半城伤御伤魂 提交于 2020-03-10 18:22:32
并发编程模型 Akka -并发编程框架 (不需要关注并发情况底层的东西,易开发易维护) Akka 介绍 写并发程序很难。 程序员不得不处理线程、 锁和竞态条件等等, 这个过程很容易出错, 而且会导致程序代码难以阅读、 测试和维护。 Akka 是 JVM 平台上构建高并发、 分布式和容错应用的工具包和运行时。 Akka 用 Scala 语言写成, 同时提供了 Scala 和 JAVA 的开发接口。 Akka 中 Actor 模型 Akka 处理并发的方法基于 Actor 模型。 在基于 Actor 的系统里, 所有的事物都是 Actor, 就好像在面向对象设计里面所有的事物都是对象一样。 但是有一个重要区别, 那就是 Actor 模型是作为一个并发模型设计和架构的, 而面向对象模式则不是。 Actor 与 Actor 之间只能通 过消息通信。 对并发模型进行了更高的抽象 异步、 非阻塞、 高性能的事件驱动编程模型(就是不会一个卡主另一个) 轻量级事件处理(1GB 内存可容纳百万级别个 Actor) 为什么 Actor 模型是一种处理并发问题的解决方案? 处理并发问题就是如何保证共享数据的一致性和正确性,为什么会有保持共享数据正确性这个问题呢? 无非是我们的程序是多线程的, 多个线程对同一个数据进行修改, 若不加同步条件, 势必会造成数据污染。那么我们是不是可以转换一下思维,

vtk 屏蔽鼠标交互事件

耗尽温柔 提交于 2020-02-07 11:47:09
在使用vtk的时候,鼠标会默认响应一些事件,比如MouseWheelBackward时,actor缩小,MouseWheelForward时,actor放大;MouseMove时,actor会随之旋转等等。 如下我们创建了一个cyliner,使用鼠标交互: 如何将这些默认事件屏蔽呢,参考了vtk的python的用户交互demo和网上的一些资料,发现 vtkInteractorStyleTrackballCamera 这个类具有鼠标交互的方法和属性,废话就不多说了,结合C#版本, 看一下这个类的定义: 相当于移动camera,屏幕上的actor会进行响应对应的事件。 直接上代码: #!/usr/bin/env python # This simple example shows how to do basic rendering and pipeline # creation. import vtk class MouseInteractorHighLightActor(vtk.vtkInteractorStyleTrackballCamera): def __init__(self, parent = None): self.AddObserver("MouseMoveEvent", self.MouseMoveEvent) self.AddObserver(

虚幻4随笔5 使用中的一些发现

旧街凉风 提交于 2020-02-06 23:15:07
行文匆匆,有些不太明白的地方评论里有补充,现在这里抱歉了! 半年多没有维护博客了,一方面是媳妇怀孕,另一方面是公司年中有一个版本…… 最近闲暇时间一直在研究虚幻,目前铺开了大概六七个原型在做,做的过程中学到了不少东西,有一些新的想法。 本来这些都是准备展开来说的,但是现在看来,每个话题展开都是需要大把的精力,所以还是先写到这里。有些已经有一些结论,有些还没有展开研究,就当是挖个坑吧,在后面几个月陆续填。 目前博主所用的版本是4.4,有些结论未必在未来还继续有效,如果发现有变化,后面会单起博客说明的。 总论: 仍在发展中,如果是准备用来做短期商业项目的,请合理评估风险。用来进行长期商业项目、或者觉得目前的功能已经可用、或者以研究为目的的,可以考虑介入。 优点是开发架构和框架体系成熟,国内策划不做脚本不做原型的开发模式可能确实相对不易适应。说程序用BP不习惯的恭喜您说出了一句正确的令人发指的废话,BP是设计给策划和关卡设计师用的,不是给你程序员用的——话说回来,也就在中国需要去把策划的想法翻译成代码的程(Fan一声)序(Yi四声)员(Gong一声)。 再次重申,如果您希望什么事儿都是程序给吃下来,或者您的项目被迫处于这种态势,而不是由策划负责脚本和内容的制作,那么请出门左转,找CE、Unity(大雾)或者其它引擎,虚幻这种跟欧美式开发方式深度绑定的引擎绝对不适合您。相信我

Akka Study - 白墨的博客

夙愿已清 提交于 2020-02-05 12:08:02
Akka 用于构建高并发、分布式且具有容错机制的事件驱动型的应用,本文是 Scala Cookbook 一书中 Akka 部分内容的总结。 Akka Guide Actor 模型与线程比较,是一种高层次的抽象。说 “高层次的抽象”这句话,就意味着这个东西简单易用,你不需要考虑太多底层的其他东西。所以如果理解了 Actor 模型的原理,就可以专注解决问题,而不需要把注意力放在像线程、锁和共享数据这样低层次的问题上。 优势 轻量级的事件驱动模型:对相应的消息事件做出异步回应,并且消息是不可变的,因为需要在不同线程之间共享。 容错性:Akka 可以用于构造 “自我修复型” 系统。 位置透明性:Akka actors 可以跨过多个 JVM 或者 服务器,其被设计为通过纯粹的消息在分布式系统中进行沟通。 在 Actor 模型中,消息是唯一的沟通方式,你要做任何事情都需要发送消息,不能直接更改 Actor 内部的状态或者使用其内部的资源。 Actor 模型简介 1、Actor 是 actor 系统中的最小单位,就类似对象是 OOP 系统中的最小单位一样。 2、也正如一个对象,一个 actor 的状态和行为也是被封装起来的。你不能直接去访问或执行一个 actor 的方法或者是成员对象(field),而只能是向这个 actor 发送一个要求访问其内部状态的消息

UE4学习心得:蓝图间信息通信的几种方法

假装没事ソ 提交于 2020-02-05 05:46:31
蓝图间通信是一个复杂关卡能否正常运行的关键,笔者在这里提供几种蓝图类之间的信息交互方法,希望能对读者有所帮助。 1.类引用 这是最直接的一种蓝图类之间的信息交互方式。首先在Editor中创建2个Actor蓝图类,分别命名为TargetActor和ControllerActor,双击打开TargetActor编辑器,将组件窗口中的DefaultSceneRoot替换成Cube,并设置成Movable,编译后保存退出,然后打开ControllerActor,将组件窗口中的DefaultSceneRoot替换成Sphere,新建变量Actor,类型为Actor引用,将其设为公共变量。返回关卡编辑器中,将2个Actor拖放进场景中 点击ControllerActor,在Details面板中可以看到Default选项将Actor设为TargetActor或者点击右侧的针状标记,然后选中场景中的TargetActor 返回ControllerActor编辑器中,添加一个Event Tick事件 运行关卡后可以看到TargetActor在不断地上升,说明在ControllerActor蓝图类中的逻辑成功地运行了,两个蓝图类之间完成了信息交互。 2.Get All Actors of Class Get All Actors of Class是一种整体上的调用

LabVIEW面向对象的ActorFramework(3)

落花浮王杯 提交于 2020-02-05 02:42:02
四、LabVIEW面向对象的编程架构:Actor Framework Actor Framework是一个软件类库,用以支持编写有多个VI独立运行且相互间可通信的应用程序,在该类型应用程序中,每个VI即代表操作者(Actors)执行独立的系统任务,操作者本身维持着自己的内部状态,并传递消息给其它的操作者,在LabVIEW编程环境中已经有了一些创建此类架构程序的技术存在,而操作者框架则聚焦于容易学习(相对于其它可能强大的工具而言),够降低死锁和竞争条件,并拥有最大限度代码复用的优点。 加载ActorFramework4.1.0,可以看到当前框架的基本结构,主要父类有Actor和Message,及Message队列类、出入队列类、优先级操作类。 Actor:拥有数据状态的模块。 Message:消息在操作者间传递用来触发状态改变。 在NI官方资料中,介绍操作者框架(ActorFramework)是在广泛应用的队列驱动状态机(QDSM)的基础上开发而成,但更优于DSDM的框架。 现在用官网的QDSM和ActorFramework的程序图做一下比较,能够很直观的看出两者的程序简洁性,如下图所示: QDSM ActorFramework 可以看到,使用操作者框架后,整个程序非常简洁,队列驱动状态机的簇和相关代码封装成类和方法,消息和条件结构封装为类和动态匹配。当接收到消息时

Unable to deserialize ActorRef to send result to different Actor

自作多情 提交于 2020-02-02 04:30:10
问题 I am starting to use Spark Streaming to process a real time data feed I am getting. My scenario is I have a Akka actor receiver using "with ActorHelper", then I have my Spark job doing some mappings and transformation and then I want to send the result to another actor. My issue is the last part. When trying to send to another actor Spark is raising an exception: 15/02/20 16:43:16 WARN TaskSetManager: Lost task 0.0 in stage 2.0 (TID 2, localhost): java.lang.IllegalStateException: Trying to

代理模式笔记

拈花ヽ惹草 提交于 2020-01-31 21:17:49
什么是代理模式 为什么使用代理模式 静态代理 不使用代理时,直接调用对象的方法,使用代理后,通过代理调用对象的方法,同时可以在方法前后添加操作. interface IAct{ void act(int money); } class Actor implements IAct{ public void act(int money) { System.out.println("收到"+money+"元,开始表演"); } } class ProxyActor implements IAct{ IAct actor; ProxyActor(IAct actor){ this.actor=actor; } @Override public void act(int money) { // TODO Auto-generated method stub System.out.println("代理前的工作"); actor.act(money); System.out.println("代理后的工作"); } } public class ProxyPattern { public static void main(String[] args) { //不使用代理 IAct ac=new Actor(); ac.act(100); //使用代理后 IAct proxy=new

How to deal with long initialization of an Akka child actor?

元气小坏坏 提交于 2020-01-30 19:32:44
问题 I have an actor which creates a child actor to perform some lengthy computations. The problem is that the initialization of the child actor takes a few seconds and all messages that the parent actor sends to the child between it is created and gets fully initialized are dropped. This is the logic of the code that I am using: class ChildActor extends Actor { val tagger = IntializeTagger(...) // this takes a few seconds to complete def receive = { case Tag(text) => sender ! tagger.tag(text)

How to deal with long initialization of an Akka child actor?

﹥>﹥吖頭↗ 提交于 2020-01-30 19:29:39
问题 I have an actor which creates a child actor to perform some lengthy computations. The problem is that the initialization of the child actor takes a few seconds and all messages that the parent actor sends to the child between it is created and gets fully initialized are dropped. This is the logic of the code that I am using: class ChildActor extends Actor { val tagger = IntializeTagger(...) // this takes a few seconds to complete def receive = { case Tag(text) => sender ! tagger.tag(text)