Akka笔记–演员介绍

过去做过多线程的任何人都不会否认管理多线程应用程序有多么艰辛和痛苦。 我说管理是因为它一开始很简单,一旦您开始看到性能改进,它就会变得非常有趣。 但是,当您发现没有一种简单的方法可以从子任务中的错误或难以发现的僵尸错误中恢复时,或者当您的探查器显示您的线程花费大量时间阻塞时,它会感到疼痛在写入共享状态之前浪费时间。

我不想谈论Java并发API及其集合如何使其变得更好和更容易,因为我确定如果您在这里,您可能需要对子任务进行更多控制,或者仅仅是因为您不喜欢编写锁和同步块,并希望更高层次的抽象。

在本系列的Akka Notes中,我们将通过简单的Akka示例来探索工具包中的各种功能。

什么是演员?

Akka的演员遵循演员模型 (duh!)。

像演员一样对待演员。 不亲自交谈的人。 他们只是通过邮件交谈。

让我们对此进行扩展。

1.消息传递

考虑两个人–一个明智的老师和学生。 学生每天早上都会向老师发送一封邮件,而明智的老师会发回明智的报价。

注意事项:

  1. 学生发送邮件。 一旦发送,邮件将无法编辑。 谈论自然不变性。
  2. 老师在需要时检查他的邮箱。
  3. 教师还会发回邮件(再次不变)。
  4. 学生可以自己检查邮箱。
  5. 学生不用等待答复。 (无阻塞)

这几乎总结了Actor模型的基本组成部分-传递消息。

Akka消息

2.并发

现在,假设有3位明智的老师和3位学生–每个学生都会向其他老师发送笔记。 那会发生什么呢? 实际上没有任何变化。 每个人都有自己的邮箱。 这里需要注意的一个细微之处是:

默认情况下,邮箱中的邮件按照到达的顺序进行读取/处理。

在内部,默认情况下是ConcurrentLinkedQueue 。 而且由于没有人等待邮件被提取,因此它只是一个无阻塞的消息。 (有多种内置邮箱,包括有界邮箱和基于优先级的邮箱 。实际上,我们也可以自己构建邮箱 )

Akka并发

3.故障转移

想象一下,这三位老师来自三个不同的部门-历史,地理和哲学。

历史老师回覆过去的事件记录,地理老师则寄给我一个有趣的地方,哲学老师则引述一段话。 每个学生向每个老师发送消息并获得答复。 学生不在乎该部门的哪个老师发回答复。 如果有一天老师生病怎么办? 必须至少有一位老师来处理部门的邮件。 在这种情况下,该部门的另一位老师会加强工作。

Akka故障转移

注意事项:

  1. 可能会有一群演员在做不同的事情。
  2. 演员可能会做一些导致异常的事情。 它无法自行恢复。 在这种情况下,可以created一个新的Actor来代替旧的Actor。 另外,Actor可以忽略该一条特定消息,然后继续处理其余消息。 这些称为指令,我们将在后面讨论。

4.多任务

有所不同的是,假设这些教师中的每一个也都通过邮件发送考试成绩(如果学生要求的话)。 同样,演员可以舒适地处理多种type的消息。

5.链接

如果学生只想收到一封最终的综合琐事邮件而不是三封怎么办?

我们也可以通过Actors做到这一点。 我们可以将教师链接为一个层次结构。 稍后我们将讨论主管,然后再回到有关期货的话题。

按照Mohan的要求,让我们尝试将类比组件与Actor模型中的组件进行映射。

AkkaComponentMatching

学生和老师成为我们的Actors 。 电子邮件收件箱将成为Mailbox组件。 请求和响应无法修改。 它们是immutable对象。 最后,Actor中的MessageDispatcher组件管理邮箱并将消息路由到相应的Mailbox

聊够了,让我们编写一些代码…。

翻译自: https://www.javacodegeeks.com/2014/09/akka-notes-introducing-actors.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/362224.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java英雄:丹·艾伦

“ Java英雄 ”系列休息了很长时间。 老实说,我想即使有很多人想在这里收录,它也可能会以虚无收场。 其中之一是丹。 我第一次要求他捐款已经将近一年半了,与此同时发生的一切,让我不再有任何答案就让我安心了。 但是以下内容在Ja…

Java-Class-I:java.util.List

ylbtech-Java-Class-I&#xff1a;java.util.List1.返回顶部 1.1、import java.util.ArrayList;import java.util.List; 1.2、List<Integer> newList new ArrayList<Integer>();newList.add(3); 2、 2.返回顶部1.1、import java.util.*;public class Test{public …

推荐:个人时间跟踪工具 ManicTime

在《个人管理 &#xff0d; 目标管理之前&#xff0c;你会时间管理吗》中我介绍的时间管理三阶段之一“对时间的实际去处进行记录”时说过现在有很多时间管理工具&#xff0c;也有人希望我介绍一下我使用的工具&#xff0c;那么我就利用中午休息时间&#xff0c;马上给大家介绍…

SQL Server 2005怎样进行性能排错

很少会有偶然的性能下降。设计不良的数据库或工作负载配置不正确的系统会经常导致性能问题。管理员需要能预先阻止或最小化问题的影响&#xff0c;当管理员遇到问题时&#xff0c;应该诊断问题并采取正确操作来修复问题。本文提供了按部就班的指导&#xff0c;通过使用可用的工…

JVM PermGen –您在哪里?

这篇文章介绍了JVM内存结构的一些基础知识&#xff0c;并快速窥视了PermGen&#xff0c;以了解自Java SE 8出现以来它已消失的地方。 裸基础 JVM只是系统上运行的另一个进程&#xff0c;魔术始于java命令。 像任何OS进程一样&#xff0c;它需要内存才能运行。 记住– JVM本身是…

python6-函数

转载于:https://www.cnblogs.com/WIU1905/p/11101249.html

Windows Phone 7.1 “芒果” SDK Beta 下载地址

Windows Phone 7.1 “芒果” SDK Beta 今天早上发布&#xff0c;第一时间下载体验。功能果然激动人心。 下载地址&#xff1a; 离线ISO请点我&#xff0c; 在线安装请点我。转载于:https://www.cnblogs.com/finehappy/archive/2011/05/25/2056849.html

Windows系统安装 ffmpeg

下载及解压 ffmpeg官方下载地址&#xff1a;https://ffmpeg.org/download.html 下载好后将其解压至你想保存的位置中。 环境变量设置 打开Windows设置&#xff0c;在搜索框输入&#xff1a;系统高级设置。 新建环境变量&#xff0c;并输入bin目录具体位置。 安装检查 按住 w…

Java黑科技之源:JVMTI完全解读

Java生态中有一些非常规的技术&#xff0c;它们能达到一些特别的效果。这些技术的实现原理不去深究的话一般并不是广为人知。这种技术通常被称为黑科技。而这些黑科技中的绝大部分底层都是通过JVMTI实现的。 形象地说&#xff0c;JVMTI是Java虚拟机提供的一整套后门。通过这套后…

常见的CSS布局

各种常见的CSS布局 在工作中会经常用到很多的布局方式&#xff0c;这里总结一下所遇到的布局&#xff0c;会持续更新。 悬挂布局 实现这种布局的方式有很多&#xff0c;这边主要挑两个&#xff0c;如下&#xff1a; 方式一&#xff1a;使用浮动和块级格式化上下文特性 这种…

OSCP-Kioptrix2014-2 漏洞利用

pChart 2.1.3 文件包含漏洞 搜索漏洞查看漏洞理由代码:hxxp://localhost/examples/index.php?ActionView&Script%2f..%2f..%2fetc/passwd 之前的8080端口禁止访问,看看apache的配置:http://192.168.1.78/pChart2.1.3/examples/index.php?ActionView&Script%2f..%2f..…

CodeSmith注册机,支持5.2.2和5.2.1版

CodeSmith&#xff0c;不用说了&#xff0c;大名鼎鼎的代码生成工具。最早是免费的&#xff0c;后来收费啦这个注册机是针对目前新的CodeSmith 5.2.2的&#xff0c;支持Professinal和其他版本。使用的方法&#xff1a;安装原版的试用版本&#xff0c;从官方网站下载运行试用版&…

linux epoll,poll,select

epoll函数用法&#xff0c;还有点poll和select 1&#xff0c;LT的epoll是select和poll函数的改进版。 特点是&#xff0c;读完缓冲区后&#xff0c;如果缓冲区还有内容的话&#xff0c;epoll_wait函数还会返回&#xff0c;直到把缓冲区全部读完。 2&#xff0c;ET的epoll&#…

shell学习笔记1-文件安全与权限

1&#xff0c;创建文件的用户和他所属的组拥有该文件&#xff0c;文件的属主可以设定谁具有读、写、执行该文件的权限&#xff0c;根用户可以改变任何普通用户的设置。 2&#xff0c;一个文件一经创建&#xff0c;就具有三种访问权限&#xff1a;读&#xff08;可以显示该文件的…

最新70佳单页网站设计案例欣赏(上篇)

单页网站是指只有一个页面的网站&#xff0c;这种形式的网站曾经非常流行&#xff0c;现在依然有很多人喜欢。不过&#xff0c;并不是每个网站都适合做成单页&#xff0c;一般都是内容比较少而且将来内容也不怎么增加的情况才适合这样做。如果你打算做一个这样的网站&#xff0…

Kubernetes 中文文档

Kubernetes 中文文档 如果想学习 Kubernetes 的小伙伴&#xff0c;可以参考如下文档学习&#xff1a; https://www.kubernetes.org.cn/docs 文档中详细讲解了 k8s 的设计理念&#xff0c;基本概念&#xff0c;常用命令等。 转载于:https://www.cnblogs.com/miracle-luna/p/1111…

网易原来也是个骗子

当初开通photo.163.com网易相册时&#xff0c;就是看着网易的宣传口号&#xff1a;免费而且不限容量&#xff01;结果现在坏了&#xff0c;规则说改就改&#xff0c;容量一下子收到1G&#xff0c;超过部份要么给钱&#xffe5;&#xffe5;&#xffe5;&#xffe5;&#xffe5…

不同设备屏幕尺寸和DPR适配

为什么需要适配 目前市面上设备屏幕属性十分多样化&#xff08;宽度和DPR并不一致&#xff09;&#xff0c;而作为设计和前端开发&#xff0c;无法为每个尺寸的设备单独设计一套UI并将其转为前端代码&#xff0c;这不现实。所以我们需要一套方案来将一套设计稿完美呈现在不同尺…

Edge浏览器开发人员工具

UserAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240" 本地存储/会话存储模拟达到上限 资源终于全部列表出来了 删除 Cookie 和 删除会话 Cookie 样式可以实时编辑了 …

linux 第一个内核模块Hello World

内核模块是Linux内核向外部提供的一个插口&#xff0c;其全称为动态可加载内核模块&#xff08;Loadable Kernel Module&#xff0c;LKM&#xff09;&#xff0c;我们简称为模块。Linux内核之所以提供模块机制&#xff0c;是因为它本身是一个单内核&#xff08;monolithic kern…