akka actor行为切换实现
Akka中actor行为的切换实际是actor的receive的函数的选择切换。
通过become()方式切换行为。
在ActorCell中维护着一个可伸缩List实现的行为堆栈。
private var behaviorStack: List[Actor.Receive] = emptyBehaviorStack
在actor接受到消息的时候,将会调用堆栈顶部的函数。
final def receiveMessage(msg: Any): Unit = actor.aroundReceive(behaviorStack.head, msg)
当通过become()切换行为模式的时候,实则就是将新的行为,也就是需要采用的receive函数放到行为堆栈的顶部。
def become(behavior: Actor.Receive, discardOld: Boolean = true): Unit =behaviorStack = behavior :: (if (discardOld && behaviorStack.nonEmpty) behaviorStack.tail else behaviorStack)
因此,如果不断通过become()函数切换行为,将存在栈溢出的风险,所以如果需要切换行为模式,需要通过unbecome()函数出栈。
def unbecome(): Unit = {val original = behaviorStackbehaviorStack =if (original.isEmpty || original.tail.isEmpty) actor.receive :: emptyBehaviorStackelse original.tail
}
akka actor行为切换实现相关推荐
- akka actor java_现代化的Java(三)——从Hello Akka说起
接下来打算花一些篇幅介绍一些异步编程的范式,也算是给自己一个学习笔记吧. 异步编程是个很诡异的领域,每个人都在谈论它,但是工作中很少有人能驾驭:很多很新潮很热的异步编程概念,运用起来却完全达不到它宣称 ...
- akka actor java_Akka:使用非默认构造函数在Scala中定义一个actor并从Java代码创建它 - java...
Akka Scala演员必须扩展akka.actor.Actor Akka Java actor必须扩展akka.actor.UntypedActor 因此,在使用非默认构造函数定义Scala act ...
- scala中akka actor例子
抛开复杂的业务逻辑,让我们从一个超级简单的例子学习Akka Actor的用法. Scala cookbook的作者Alvin Alexander在他的网站上提供了两个例子. 本文翻译.整理于他的两篇文 ...
- AKKA Actor创建
Actor 类定义 Actor 类需要继承AbstractActor类 实现createReceive方法,绑定各类actor收到不同类型消息对应处理不同业务逻辑 默认提供了ReceiveBuilde ...
- java akka actor性能_akka-http - 如何通过Akka HTTP(Java)与Akka Actor进行交互 - 堆栈内存溢出...
话题 我想通过Akka HTTP与Akka Actor进行交互 . 这个想法是要有一个系统,其中HTTP客户端调用Akka HTTP服务器方法,该方法处理对Akka Actor的请求. actor处理 ...
- Akka Actor Inbox_信箱
2019独角兽企业重金招聘Python工程师标准>>> Akka Actor Inbox_信箱 Inbox_send_receive Inbox 形象的表示为Actor的信箱,具有收 ...
- Akka Actor模型的简介与Actor的创建方式
Akka Actor其具有以下特点: 系统中的所有事物都可以扮演一个Actor Actor之间完全独立 在收到消息时,Actor所采取的所有动作都是并行的,在一个方法中的动作没有明确的顺序 Actor ...
- 【Akka】Akka Actor生命周期
1.概述 转载:Akka Actor生命周期 用于自我学习. Actor的生命周期是使用Hooks体现和控制的,我们可以重写相关的Hooks,从而实现对Actor生命周期各环节的细粒度控制.各事件发生 ...
- java akka actor,【Akka】Actor引用
Actor系统的实体 在Actor系统中,actor之间具有树形的监管结构,并且actor可以跨多个网络节点进行透明通信. 对于一个Actor而言,其源码中存在Actor,ActorContext,A ...
最新文章
- Self-Attention 加速方法一览:ISSA、CCNet、CGNL、Linformer
- 第十二届全国大学生智能汽车竞赛获奖名单
- HDOJ 1905 Pseudoprime numbers(模运算)
- python文件读取 ,json文件的存储
- 图片和input不对齐_pdf到png再到mp4短视频:不需要工具,2个指令1键搞定
- CG-CTF-Web-伪装者
- JavaScript怎么上传图片
- oracle数据库导入txt,oracle数据库导入TXT文件方法介绍
- 阿里云 Debian 9.2 安装 Java Web 环境
- Web的新图像格式WebP
- android lottie字体json,Android Lottie集成及基本用法
- 用fft对信号进行频谱分析实验报告_频谱分析之Analyzer软件分析
- 中兴2016笔试题答案Java_中兴笔试题和面试题答案与答案
- 怎么p出模糊的照片_ps怎么把模糊的图片变清楚?ps把模糊图片高清化的具体教程...
- 【BUG】【已解决】VS2019:应用程序无法正常启动(0x000007b)
- c语言乘法口诀表的流程图_C语言实现“乘法口诀表”
- instagram授权流程(第二篇)
- CRM高端制造业应用案例分析
- 互联网公司的几种销售模式
- 从零写一个操作系统之booting
热门文章
- VUE自学日志03-模板语法
- vue-drag-resize实线页面的拖拽与缩放
- spring基础——普通bean xml注入
- php函数实验,PHP函数
- linux let s证书续期,BT(宝塔面板)Let’s Encrypt证书续签方法
- webpack 编译stylus_webpack 文档更新日志(9.12-9.29)
- GAN 生成对抗网络论文阅读路线图
- 关于API和SDK的理解
- Hyperledger Fabric Membership Service Providers (MSP)——成员服务
- 微信小程序周报(第十一期)-极乐商店出品