Akka学习笔记:Actors介绍
任何在过去做过多线程开发的人都不会否认维护多线程应用程序是多么难和头疼的一件事!我这里说的是维护,因为多线程开发开始的时候很简单,当你看到性能的提升对你来说是件多么高兴的一件事。然而,当你看到在子任务中很难找到容易的方法来从错误中恢复;或者是存在僵尸进程的bug很难重现;或者你的监控程序显示你的线程浪费大量的时间来等待共享状态而阻塞的时候对你来说是多么头疼!
我在这里并没有提到Java的并发API和它的集合使得多线程的编程变得相当简单轻松,因为我相信你既然来到这里,这就说明你希望能更好地控制你的子任务,或者你就是不喜欢使用锁以及同步块,希望能有一种更高层次的抽象。
在本系列的Akka笔记中,将会通过简单的Akka例子来探讨Akka的多种特性。
什么是ACTORS
Akka Actors遵循Actor模型
我们这把Actors当作是一个人,这个人不会自己和其他的人直接说话,他们只通过mail来进行交流。
现在来探讨Actors的一些特性:
一、消息传递
假设有两个人:学生和聪明的老师。学生每天早上都会给老师发送邮件,而聪明的老师都会回复一句名言。这里需要解释:
1、学生发送邮件。一旦发送成功,邮件不能再修改。这天然就具备了不可变性;
2、老师会自己决定何时检查邮箱;
3、老师还会回复一封邮件(也是不可变的);
4、学生会自己决定何时检查邮箱;
5、学生不会一直等待回信(非阻塞的)
这就可以总结出Actor模型的一个基本特征——消息传递
二、并发
现在,假设有三个聪明的老师和三个学生。每个学生都会给每个老师发送邮件。这会发生什么事?其实什么都没改变!每个人都有他自己的邮箱。这里需要注意的一点:默认情况下,邮箱里面的邮件是按照他们先后达到的次序进行阅读和处理的。
本质上,这很像是ConcurrentLinkedQueue。没有人去等待邮件被阅读,简单来说这就是一个非阻塞的消息(在Akka中内置了许多的mailboxes,这里http://doc.akka.io/docs/akka/snapshot/scala/mailboxes.html,包括了有界和基于优先级的。其实,我们自己也可以去实现)。
三、错误恢复
假如这三个老师分别来自不同的院系:历史系、地理系和哲学系。
历史系的老师用过去的某个事件笔记进行回复;而地理系的老师回复了一个有趣的地点;哲学系的老师回复了一个引用。每个学生分别给每个老师发送消息并分别得到回复。学生并不关心邮件到底是系里的哪个老师回复的。如果有一天有个老师生病了呢?系里至少得有一个老师在处理邮件才行。这样的话,系里的另一位老师就会顶上这项工作。
这里需要注意的地方:
1、会有一个Actor池,每个Actor会处理不同的事件。
2、Actor做的事情可能会抛出异常,而它自己无法从中恢复。在这种情况下,需要再生成(created )一个新的Actor来顶替它。换句话说,这个新的Actor会忽略刚才那条消息,继续处理剩余的消息。这些也被称为指令(Directive),后面我们会再讲到它们。
四、多任务
假设学生需要考试成绩,每个老师是通过邮件来发送的。也就是说,Actor可以处理多种类型的消息。
五、消息链
假如学生只想收到一封邮件而不是三件呢?
我们也可用用Actor来实现!我们可以通过分层来把老师连在一起。这个我们将在后面讲到Supervisor和Future的时候再回来讲。
应Mohan的要求,我们把类比的实体和Actor模型中的组件做一下映射。
学生和老师变成我们的Actor,Email Inbox对应Mailbox 组件。请求和响应不可修改、它们是不可变对象。最后,Actor中的MessageDispatcher组件将管理mailbox,并且将消息路由到对应的Mailbox中。
Akka学习笔记系列文章:
《Akka学习笔记:ACTORS介绍》
《Akka学习笔记:Actor消息传递(1)》
《Akka学习笔记:Actor消息传递(2)》
《Akka学习笔记:日志》
《Akka学习笔记:测试Actors》
《Akka学习笔记:Actor消息处理-请求和响应(1) 》
《Akka学习笔记:Actor消息处理-请求和响应(2) 》
《Akka学习笔记:ActorSystem(配置)》
《Akka学习笔记:ActorSystem(调度)》
http://www.taodudu.cc/news/show-4014589.html
相关文章:
- Akka and Actors
- Scala zio-actors与akka-actor集成
- Akka Actors入门案例解析
- Dapr专题之06Actors
- Actors编程模型
- 学Dapr Actors 看这篇就够了
- MySQL8.0 setup_actors执行时间统计
- CARLA 笔记(05)— Actors and blueprints(创建和修改 Blueprint、生成 Spawning、使用 Handling、销毁 Destruction)
- Dapr for dotnet | 并发计算模型 - Virtual Actors
- Actors 介绍
- Actor 模型是什么?Gear 为什么使用它?
- Actors 基于消息驱动的异步编程模型
- c++小游戏大全(不定时更新)
- echars、象棋、飞机大战、五子棋
- 飞机大战小游戏 C语言(课设任务)
- Python高级第2课——飞机大战(只读课堂)
- HTML5小游戏源码收藏
- Pygame库200行代码实现简易飞机大战的小游戏
- python实现飞机大战源代码+素材+项目分析
- Python语言程序设计课程论文--飞机大战
- 优秀课程案例:使用Scratch制作飞机大战游戏!
- 基于opencv的证件照换背景
- 阿里云OSS线程增长问题分析
- 阿里云服务平台,分布式架构云平台解决方案
- sklearn之线性回归实现—阿里云天池二手车交易价格预测赛
- 实习面试感悟-阿里云
- 阿里云云计算ACP学习(二)---弹性存储
- 阿里云 vs Azure-大数据
- 阿里云价格/报价 - 阿里云服务器最新收费标准
- 文件系统FastDFS和阿里云OSS
Akka学习笔记:Actors介绍相关推荐
- (转)Akka学习笔记
Akka学习笔记系列文章: <Akka学习笔记:ACTORS介绍> <Akka学习笔记:Actor消息传递(1)> <Akka学习笔记:Actor消息传递(2)> ...
- Clojure学习笔记(一)——介绍、安装和语法
Clojure学习笔记(一)--介绍.安装和语法 什么是Clojure Clojure是一种动态的.强类型的.寄居在JVM上的语言. Clojure的特性: 函数式编程基础,包括一套性能可以和典型可变 ...
- UE4 Material 101学习笔记——01-07 介绍/PBR基础/UV扭曲/数据类型/翻页动画/材质混合/性能优化
UE4 Material 101学习笔记--01-07 介绍/PBR基础/UV扭曲/数据类型/翻页动画/材质混合/性能优化 Lec 01 什么是着色器 What Is A Shader? 1.1 介绍 ...
- wyy课堂cmos模拟设计课学习笔记-器件介绍
推荐一下wyy课堂的cmos模拟课程,比之前便宜好多就果断买了. wyy课堂cmos模拟设计课学习笔记-器件介绍 一.工艺库介绍的相关文件 二.bipolar 三.mos 四.电阻 五.电容 六.电感 ...
- Unity学习笔记(一)~介绍以及入门
1.简单的个人介绍 在介绍Unity前,容许我介绍一个自己吧,毕竟自我介绍是每一个码农,咳咳,每一个求职人员必备的一项工作,虽然感觉就是一个开场白吧. 本人呢就是普通的本科毕业,既不是985也不是21 ...
- String类的学习笔记(中):介绍字符串的不可变性和字符串常量池
本文介绍了String类字符串的不可变性和字符串常量池,主要包括 如何保证字符串不可变, 如何对字符串的修改. 为什么字符串要设置不可变, 字符串常量池的创建和了解,简单的字符串常量池图, 以及如何将 ...
- Ventuz教程学习笔记之介绍
1.Ventuz 介绍 Ventoz能做什么? Ventuz是一款实时图文包装内容创作.制作和播出控制软件.Ventuz专注于高端视听内容的制作,包括交互展示和大型活动.视频墙.广播电视在线包装及演播 ...
- 设计模式学习笔记 1.介绍
学习设计模式是为了深入理解OO思想和原则. 学习设计模式的基础知识: 必须先有类和对象,才可以谈设计模式.把现实世界的业务功能抽象成对象,如何抽象?GRASP给出了基本的指导原则. GRASP, Ge ...
- torch学习笔记--tensor介绍2,对tensor的结构
本章将介绍tensor的结构与函数 torch.Tensor():返回一个空tensor. torch.Tensor(tensor):返回一个拥有相同内存的tensor,类似于指针.不是重新开辟一个内 ...
- sqlite3学习笔记-方法介绍和测试代码
创建数据库 :sqlite3 test.db 查看数据数据 : .databases 创建表 :create table student (id integer primary key autoinc ...
最新文章
- 2022-2028年中国钢轨探伤车行业市场研究及前瞻分析报告
- php调用以太坊geth API说明
- Linux之数值运算:let,(()),[ ]
- Java Lambda 表达式的常见应用场景
- 19、SQL Server 数据修改之Insert into
- 解决升级 Office 2010 之后 Outlook 提示“无法打开 Microsoft Outlook”
- QPW 点评点赞日志表(tf_appraise_praise)
- 3.6.4python下载安装教程_python 3.6.4安装教程
- java程序在JVM中是如何运行的?
- mysql常用语句1
- 文件及代码代码命名规则
- 最新抖音视频无水印解析接口-突破频率限制
- 深度学习deep learning
- 华为鸿蒙开发者大赛,超25000位开发者,华为举办首届鸿蒙开发者创新大赛颁奖典礼...
- 华为推送 坑点 自定义intent
- 手机访问电脑的静态文件(html...)(anywhere)
- kafka-topics.sh脚本详解
- TemplateField.ItemTemplate 后台实现
- c语言字符型数据是,C语言字符型数据.doc
- Java堆外内存:堆外内存回收方法