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行为切换实现相关推荐

  1. akka actor java_现代化的Java(三)——从Hello Akka说起

    接下来打算花一些篇幅介绍一些异步编程的范式,也算是给自己一个学习笔记吧. 异步编程是个很诡异的领域,每个人都在谈论它,但是工作中很少有人能驾驭:很多很新潮很热的异步编程概念,运用起来却完全达不到它宣称 ...

  2. akka actor java_Akka:使用非默认构造函数在Scala中定义一个actor并从Java代码创建它 - java...

    Akka Scala演员必须扩展akka.actor.Actor Akka Java actor必须扩展akka.actor.UntypedActor 因此,在使用非默认构造函数定义Scala act ...

  3. scala中akka actor例子

    抛开复杂的业务逻辑,让我们从一个超级简单的例子学习Akka Actor的用法. Scala cookbook的作者Alvin Alexander在他的网站上提供了两个例子. 本文翻译.整理于他的两篇文 ...

  4. AKKA Actor创建

    Actor 类定义 Actor 类需要继承AbstractActor类 实现createReceive方法,绑定各类actor收到不同类型消息对应处理不同业务逻辑 默认提供了ReceiveBuilde ...

  5. java akka actor性能_akka-http - 如何通过Akka HTTP(Java)与Akka Actor进行交互 - 堆栈内存溢出...

    话题 我想通过Akka HTTP与Akka Actor进行交互 . 这个想法是要有一个系统,其中HTTP客户端调用Akka HTTP服务器方法,该方法处理对Akka Actor的请求. actor处理 ...

  6. Akka Actor Inbox_信箱

    2019独角兽企业重金招聘Python工程师标准>>> Akka Actor Inbox_信箱 Inbox_send_receive Inbox 形象的表示为Actor的信箱,具有收 ...

  7. Akka Actor模型的简介与Actor的创建方式

    Akka Actor其具有以下特点: 系统中的所有事物都可以扮演一个Actor Actor之间完全独立 在收到消息时,Actor所采取的所有动作都是并行的,在一个方法中的动作没有明确的顺序 Actor ...

  8. 【Akka】Akka Actor生命周期

    1.概述 转载:Akka Actor生命周期 用于自我学习. Actor的生命周期是使用Hooks体现和控制的,我们可以重写相关的Hooks,从而实现对Actor生命周期各环节的细粒度控制.各事件发生 ...

  9. java akka actor,【Akka】Actor引用

    Actor系统的实体 在Actor系统中,actor之间具有树形的监管结构,并且actor可以跨多个网络节点进行透明通信. 对于一个Actor而言,其源码中存在Actor,ActorContext,A ...

最新文章

  1. Self-Attention 加速方法一览:ISSA、CCNet、CGNL、Linformer
  2. 第十二届全国大学生智能汽车竞赛获奖名单
  3. HDOJ 1905 Pseudoprime numbers(模运算)
  4. python文件读取 ,json文件的存储
  5. 图片和input不对齐_pdf到png再到mp4短视频:不需要工具,2个指令1键搞定
  6. CG-CTF-Web-伪装者
  7. JavaScript怎么上传图片
  8. oracle数据库导入txt,oracle数据库导入TXT文件方法介绍
  9. 阿里云 Debian 9.2 安装 Java Web 环境
  10. Web的新图像格式WebP
  11. android lottie字体json,Android Lottie集成及基本用法
  12. 用fft对信号进行频谱分析实验报告_频谱分析之Analyzer软件分析
  13. 中兴2016笔试题答案Java_中兴笔试题和面试题答案与答案
  14. 怎么p出模糊的照片_ps怎么把模糊的图片变清楚?ps把模糊图片高清化的具体教程...
  15. 【BUG】【已解决】VS2019:应用程序无法正常启动(0x000007b)
  16. c语言乘法口诀表的流程图_C语言实现“乘法口诀表”
  17. instagram授权流程(第二篇)
  18. CRM高端制造业应用案例分析
  19. 互联网公司的几种销售模式
  20. 从零写一个操作系统之booting

热门文章

  1. VUE自学日志03-模板语法
  2. vue-drag-resize实线页面的拖拽与缩放
  3. spring基础——普通bean xml注入
  4. php函数实验,PHP函数
  5. linux let s证书续期,BT(宝塔面板)Let’s Encrypt证书续签方法
  6. webpack 编译stylus_webpack 文档更新日志(9.12-9.29)
  7. GAN 生成对抗网络论文阅读路线图
  8. 关于API和SDK的理解
  9. Hyperledger Fabric Membership Service Providers (MSP)——成员服务
  10. 微信小程序周报(第十一期)-极乐商店出品