首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Akka(6): becomeunbecome:运算行为切换

通过一段时间学习了解,加深了一些对Akka认识,特别是对于Akka实际编程用途方面。...具备了这些功能后,也许我们就可以完全用Actor模式来替代传统单线程行令编程了。Akka可以通过Actor动态行为转换来实现同一Actor不同情况下提供不同功能支持。...我们前面提到Actor功能是receive函数内实现。那么转换功能是否就是切换不同receive函数呢?...FillSeasons.HowYouFeel } FeelingsActor里我们定义了三个receive函数,对共同HowYouFeel消息采取了不同反应。默认行为是spring。...可以理解,所有connected状态之前任何操作都不会真正生效。Akka提供了个Stash trait能把一个receive函数未处理消息都存起来。

94390

Akka 指南 之「邮箱」

如果 Actor 部署配置了不同邮箱,可以直接配置,也可以通过具有指定邮箱类型调度器(dispatcher)配置,那么这将覆盖此映射。...java.util.PriorityQueue提供支持 优先级相同邮件传递顺序未定义,与BoundedStablePriorityMailbox相反 是否阻塞:如果与非零mailbox-push-timeout-time...注释:请确保包含一个采用akka.actor.ActorSystem.Settings和com.typesafe.config.Config参数构造函数,因为此构造函数是通过反射调用来构造邮箱类型。...幕后,构建了一种空 Actor 引用,将其发送给系统守护者 Actor,该 Actor 实际上创建了 Actor 及其上下文,并将其放入引用。...在这之前,发送到ActorRef消息将在本地排队,只有交换真正填充之后,它们才会被传输到真正邮箱

1.5K30
您找到你想要的搜索结果了吗?
是的
没有找到

异步编程 - 14 异步、分布式、基于消息驱动框架 Akka

分布式系统:Akka 提供了构建分布式系统支持。您可以Actor 部署不同节点上,这些节点可以是物理机器或虚拟机。...它提供了监督策略,允许 Actor 发生故障时采取自定义恢复操作。这有助于系统故障时继续运行,提高了系统可用性。...对共享内存在现代计算机架构上误解 多核CPU架构,多线程之间不再有真正共享内存,而是通过Cache行传递数据,使得共享变量内存可见性成为问题。...Actor保持了封装性,因为消息处理是串行,不需要使用锁来同步多线程访问。 Actor状态是本地,不共享,通过消息传递数据,符合现代系统内存工作方式。...监督程序可以决定是否重新启动子Actor或停止子Actor,确保系统可恢复性和健壮性。 ---- 小结 总的来说,Akka 是一个强大框架,适用于构建高度并发、分布式、可伸缩和容错性强应用程序。

74640

详解Android LibgdxScrollPane和Actor事件冲突问题解决办法

详解Android LibgdxScrollPane和Actor事件冲突问题解决办法 Libgdx使用过程,经常会用到ScrollPane这个widget,来实现滑动效果, 如下所示: ?...但是如果想在上面的效果上添加一点扩展,比如ScrollPaneActor可以从ScrollPane移出来,并添加到Stage,则需要添加额外逻辑 具体代码参考如下: /** * Created...inStage) { Vector2 vector2 = actor.localToStageCoordinates(new Vector2()); actor.setPosition(vector2....x, vector2.y); stage.addActor(actor); stage.cancelTouchFocusExcept(this, actor); inStage = true; } }...如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站支持!

76910

快速入门 Akka Java 指南

消息应该是不可变,因为它们不同线程之间共享。 将 Actor 关联消息作为静态类放在 Actor 是一个很好实践,这使得理解 Actor 期望和处理消息类型更加容易。...receiveBuilder定义了行为;Actor 应该如何响应它接收到不同消息。Actor 可以有状态。访问或改变 Actor 内部状态是线程安全,因为它受 Actor 模型保护。...分布式系统,这种间接创建实例方法增加了很多好处和灵活性。 Akka 位置无关紧要。...这就启用了故障管理“让它崩溃(let it crash)”模型,该模型,系统可以通过销毁有问题 Actor 和重新启动健康 Actor 来自我修复。...注意:本例,Greeter Actor 都使用了相同 Printer 实例,但我们可以创建多个 Printer Actor 实例。

7.9K31

阅读源码|Spark 与 Flink RPC 实现

尤其是 Akka 作为一个功能复杂重量级框架,并且 Typed Akka 做出了限制公开直接沟通两个 Actor 能力,强制要求使用 Akka Cluster 决定。...Spark RPC 实现主要位于 core 模块下 org.apache.spark.rpc 这个包下,阅读代码过程通过跳转到定义和查找使用点可以找到完整脉络。...通常来说,由于 Actor Model Actor 是单线程处理消息,你同一个消息处理过程多次调用 sender() 返回都是当前消息来源。...从熟悉变成模型出发,可以把 ask 当成返回值不为 void 函数或者 Pascal function,send 当成返回值为 void 函数或者 Pascal procedure。...,首先看你发布到 Dispatcher 作业是否被分派到 MainThreadExecutor 那个线程上。

1.2K20

Akka(0):聊聊对Akka初步了解和想法

Actor不单可以在当前JVM运行,也可以跨JVM在任何机器上运行,这基本上就是Akka程序实现分布式运算关键了。...ActorAkka系统最小运算单元。每个Actor只容许单一线程,这样来说Actor就是一种更细小单位线程Akka编程模式和其内置线程管理功能使用户能比较自然地实现多线程并发编程。...Actor主要功能就是单一线程里运算维护它内部状态,那么它内部状态肯定是可变(mutable state),但因为每个Actor都是独立单一线程运算单元,加上运算是消息驱动(message-driven...Actor内部状态(internal state)与函数式编程不可变集合(immutable collection)元素差不多,都是包嵌一个类型内,即F[A] >>> Actor[A]从类型款式来讲很相像...我们可以Actor视作不纯函数(impure function),对同样输入可能会产生不同输出结果,如此就无法把对Actor编程归类为函数式编程了,但Actor编程的确是一种有别于其它编程模式、

1K80

Akka(2):Actor生命周期管理 - 监控和监视

由于消息驱动式程序是松散耦合,每项功能都是独立线程运算,互不干扰依赖,所以我们可以很自然分开来实现各项功能以及独立测试每项功能。...receive函数所调用功能函数可以是任何JVM兼容语言函数,由于每个Actor运算都在自己独立线程里进行,所以我们不必担心Actor函数在运行交叉调用问题。...Akka程序本就是一种原生线程程序,每个Actor都在一个自己线程内独立运算它receive函数。...而这个问题在Akka编程得到了完美的解决。Akka编程里我们可以把每段可能产生异常代码放到一个独立Actor中去运算。AkkaActor组织是一个层级结构。...父级Actor通过递归方式先停止下面的子孙Actor,那么启动过程这些停止子孙Actor是否会自动构建呢?

2.4K80

geotrellis使用(六)Scala并发(并行)编程

安装完成之后,IDEA安装sbt插件,然后选择创建SBT项目,与普通Scala语言最主要不同是会创建一个build.sbt文件,这个文件主要记录就是项目的依赖等,要添加依赖就可以添加如下两行代码...是一个偏函数,用于接收并处理其他Actor发送消息,这里就用到了模式匹配,可以根据不同消息类型进行不同处理,相当于路由。...Math.PI 24 }       上面的代码定义了两个Actor对象actor_a,actor_b,采用此种方式Actor会自动start,然后线程各向每个Actor发送了一条信息,Actor...用于管理Actor,第二句就是system创建一个上面MyActor实例。...通过打印actor.path可以得到akka://akkatest/user/akkaactor,可以看出该Actor确实是system之下,其中user表示是用户自定义Actor

1.4K50

Akka(1):Actor - 靠消息驱动运算器

,这样让用户不知不觉自然实现了多线程并发软件编程(concurrent programming)。...从这个案例结论是尽量把Akka Actor使用在需要维护内部状态应用。如果为了实现non-blocking只需要把程序分布到不同线程里运行的话就应该直接用Future,这样自然多。...每一个Actor结构中都可以用一个路径(ActorPath)来代表它在系统结构里位置。我们可以重复用这个路径来构建Actor,但每次构建都会产生新ActorRef。...所以这些函数功能就代表着Actor行为模式。Actor运算行为可以通过become来替换默认receive函数,用unbecome来恢复默认行为。...wallet定义,必须继承Actor以及override receive函数: class Wallet extends Actor { import Wallet._

60060

Akka 指南 之「什么是 Actor?」

这种分为内部对象和外部对象方法可以实现所有所需操作透明性:不需要更新其他地方引用情况下重新启动 Actor,将实际 Actor 对象放在远程主机上,完全不同应用程序Actor 发送消息...好消息是,从概念上讲,Akka 每个 Actor 都有自己轻量级线程,这完全与系统其他部分隔离开来。这意味着,不必使用锁来同步访问,你可以编写 Actor 代码,而不必担心并发性。...幕后,Akka 将在一组真正线程上运行一组 Actor,在这些线程,通常许多 Actor 共享一个线程,随后对一个 Actor 调用可能最终不同线程上进行处理。...行为(Behavior)指的是一个函数,它定义该时间点对消息做出反应时要采取操作,例如,如果客户端被授权,就转发一个请求,否则就拒绝它。...这些更改是通过从行为逻辑(behavior logic)读取状态变量对它们进行编码来实现,或者函数本身可以在运行时交换出来,请参阅become和unbecome操作。

87320

详解 AndroidLibgdx使用ShapeRenderer自定义Actor解决无法接收到Touch事件问题

详解 AndroidLibgdx使用ShapeRenderer自定义Actor解决无法接收到Touch事件问题 今天项目中实现了一个效果,主要是画一个圆。...为了后续使用方便,将这个圆封装在一个自定义Actor(CircleActot),后续想显示一个圆时候,只要创建一个CircleActor即可。...ClickListener(){ public void click(){ Gdx.app.log("TAG", "ca is clicked"); } }) stage.add(ca); 上述代码...后续调了大半天之后终于弄清楚了原因:虽然CircleActordraw方法通过ShapeRenderer.circle方法将一个圆画到了屏幕上某一位置,但是此ShapeRenderer其实和Actor...唯一联系就是以下两句代码, 意思应该是将ShapeRenderercamera和Actor对象一致。

79720

线程框架模型总结

ActorAkkaJVM上Actor模型实现。...Reactor vs Proactor模型: Reactor模型: 1 向事件分发器注册事件回调 2 事件发生 3 事件分发器调用之前注册函数 4 回调函数读取数据,对数据进行后续处理 Proactor...模型: 1 向事件分发器注册事件回调 2 事件发生 3 操作系统读取数据,并放入应用缓冲区,然后通知事件分发器 4 事件分发器调用之前注册函数 5 回调函数对数据进行后续处理 以下是Netty...Carl Hewitt 1973年对Actor模型进行了如下定义:"Actor模型是一个把'Actor'作为并发计算通用原语"....因此Actor空间(分布式)和时间(异步驱动)上解耦。而Akka是Lightbend(前身是Typesafe)公司JVM上Actor模型实现。

73130

scala快速入门系列【Akka

ActorAkka中最核心概念,它是一个封装了状态和行为对象,Actor之间可以通过交换信息方式进行通信,每个Actor都有自己收件箱(Mailbox)。...通过Actor能够简化锁及线程管理,可以非常容易地开发出正确并发程序和并行系统,Actor具有如下特性: 提供了一种高级抽象,能够简化并发(Concurrency)/并行(Parallelism)应用场景下编程开发...3.重要类介绍 ActorSystem:Akka,ActorSystem是一个重量级结构,他需要分配多个线程,所以实际应用,ActorSystem通常是一个单例对象,我们可以使用这个ActorSystem...ActorSystem是一个单例对象 . actor负责通信 4.Actor AkkaActor负责通信,Actor中有一些重要生命周期方法。...引用 //ActorContext全局变量,可以通过已经存在actor,寻找目标actor //调用对应actorSelection方法, // 方法需要一个path路径

68420

Scala Actors迁移指南

一步一步指导迁移到Akka 在这一章,我们将通过actor迁移5个步骤。每一步之后代码都要为可能错误进行检测。在前4个步骤可以一边迁移一个actor和一边测试功能。...Scala,控制器行为主要是act方法定义。逻辑上来说,控制器是一个并发执行act方法过程,执行完成后过程终止。Akka,控制器用一个全局消息处理器来依次处理它消息队列消息。...消息处理偏函数中使用react 和 andThen可以使receive调用模型化。下面是一些简单例子。...当整个移植完成后,错误处理也可以改由Akka来监管。 修改ACTOR方法 当我们移除了act方法以后,我们需要替换Akka不存在,但是有相似功能方法。...当所有的主线程和actors结束后,Scala程序会终止。迁移到Akka后,当所有的主线程结束,所有的actor systems关闭后,程序才会结束。

97420

你有必要了解一下Flink底层RPC使用框架和原理

它是Actor Model一个实现,和Erlang并发模型很像。Actor模型,所有的实体被认为是独立actors。actors和其他actors通过发送异步消息通信。...另外,每一个actor维护自身单独状态。一个Actors网络如下所示: ? 每个actor是一个单一线程,它不断地从其邮箱poll(拉取)消息,并且连续不断地处理。...这也是我们为什么不该在actor线程里调用可能导致阻塞“调用”。因为这样调用可能会阻塞该线程使得他们无法替其他actor处理消息。 2.1....关闭ActorSystem system.terminate(); Akka,创建每个Actor都有自己路径,该路径遵循 ActorSystem 层级结构,大致如下: 本地:akka://sys...); } RpcEndpoint定义了一些方法如runAsync(Runnable)、callAsync(Callable, Time)方法来执行Rpc调用,值得注意Flink设计,对于同一个

2.3K30

傻白甜,约不约?

Akka特点: 对并发模型进行了更高抽象 是异步、非阻塞、高性能事件驱动编程模型 是轻量级事件处理(1GB内存可容纳百万级别个Actor) 它提供了一种称为Actor并发模型,其粒度比线程更小,你可以系统启用大量...它提供了一套容错机制,允许Actor出现异常时进行一些恢复或重置操作。 Akka可以单机上构建高并发程序,也可以在网络构建分布式程序,并提供位置透明Actor定位服务。...{Actor, ActorSystem, Props} import scala.io.StdIn class HelloActor extends Actor{ // 重写接受消息函数,其功能是接受消息并处理...,即关闭其内部线程池(ExcutorService) } } } object HelloActor { /** * 创建线程池对象MyFactory,用来创建actor对象...通过MyFactory.actorOf方法来创建一个actor,注意,Props方法第一个参数需要传递我们自定义HelloActor类, * 第二个参数是给actor起个名字 */

79530

Akka 指南 之「Actors」

Props对象构造过程,会验证是否存在匹配构造函数,如果未找到匹配构造函数或找到多个匹配构造函数,则会导致IllegalArgumentException。...重新启动期间,它由postRestart默认实现调用,这意味着通过重写该方法,你可以选择是否只为此 Actor 或每次重新启动时调用一次此方法初始化代码。...建议将消息处理实际工作委托给方法,而不是每个lambda定义具有大量代码大型ReceiveBuilder。...停机阶段(shutdown phases)顺序配置akka.coordinated-shutdown.phases定义。...通过消息传递初始化 有些情况下,构造函数无法传递 Actor 初始化所需所有信息,例如在存在循环依赖项情况下。

4K30
领券