Scala-Unit7-Scala并发编程模型AKKA
一、Akka简介
Akka时spark的底层通信框架,Hadoop的底层通信框架时rpc。
并发的程序编写很难,但是Akka解决了spark的这个问题。
Akka构建在JVM平台上,是一种高并发、分布式、并且容错的应用工具包;
Akka使用Scala语言编写,同时它提供了Scala和Java的开发接口,Akka可以开发一些高并发的程序。
二、Akka的Acor模型
A卡卡处理并发的方法基于actor模型,在基于actor的系统中,所有事物都是actor(类似于Java的万物皆对象);
actor是一个并发模型设计的架构,而面对对象不属于结构,它是一门思想;

如上如,actor与actor直接只能通过消息通信,
当一个actor给另一个actor发送消息时,只需要将消息发送给actor对应的代理(emailBox)即可,
而actor怎么处理消息是我们自己定义的。
三、Akka特点
1.对并发模型进行了更高的抽象;
2.它是异步、非阻塞、高性能的事件驱动编程模型;
3.它是一个轻量级的时间编程模型(1GB内存可以容纳百万级别的Actor)
4.actor简化了并发编程,提高了程序的性能
四、Akka编程
1.需求1:我对自己发送消息,并处理消息
//创建CallMe类继承Actor,它包含了对消息处理的业务逻辑
class CallMe extends Actor{
//重写recevie方法,负责接收和处理消息
override def receive: Receive = {
case "Hunter is cool" => println("You are Right")
case "Hunter is ugly" => println("You are wrong")
case "stop" => {
//关闭代理ActorRef
context.stop(self)
//关闭ActorSystem
context.system.terminate()
}
}
} object CallMe {
//1.创建ActorSystem对象
private val acFactory = ActorSystem("AcFactory")
//2.调用ActorSystem对象的ActorOf方法,创建代理callRef
private val callRef = acFactory.actorOf(Props[CallMe],"CallMe") def main(args: Array[String]): Unit = {
//3.发送消息, !代表发送的意思
callRef ! "Hunter is cool"
callRef ! "Hunter is ugly"
callRef ! "stop"
}
}
2.需求2:男孩和女孩的对话模拟
class BoyActor(val b:ActorRef) extends Actor{
override def receive: Receive = {
case "你好,mm" => {
b ! "你好,mm"
}
case "你好,gg" => {
println("你好,gg")
b ! "我能约你吃饭么?"
}
case "叔叔,我们不约!" =>{
println("叔叔,我们不约!")
context.stop(self)
context.system.terminate()
}
}
}
class GirlActor(val g:ActorRef) extends Actor{
override def receive: Receive = {
case "你好,mm" =>{
println("你好,mm")
g ! "你好,gg"
}
case "我能约你吃饭么?" =>{
println("我能约你吃饭么?")
g ! "叔叔,我们不约!"
}
}
}
object WeChat {
private val weChat = ActorSystem("WeChat")
private val boyRef: ActorRef = weChat.actorOf(Props(new BoyActor(girlRef)),"Boy")
private val girlRef: ActorRef = weChat.actorOf(Props(new GirlActor(boyRef)),"Girl")
def main(args: Array[String]): Unit = {
boyRef ! "你好,mm"
}
}
运行结果:

Scala-Unit7-Scala并发编程模型AKKA的更多相关文章
- Scala进阶之路-并发编程模型Akka入门篇
Scala进阶之路-并发编程模型Akka入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Akka Actor介绍 1>.Akka介绍 写并发程序很难.程序员不得不处 ...
- Scala并发编程模型AKKA
一.并发编程模型AKKA Spark使用底层通信框架AKKA 分布式 master worker hadoop使用的是rpc 1)akka简介 写并发程序很难,AKKA解决spark这个问题. akk ...
- 15. Scala并发编程模型Akka
15.1 Akka介绍 1) Akka是Java虚拟机JVM平台上构建高并发.分布式和容错应用的工具包和运行时,可以理解成Akka是编写并发程序的框架 2) Akka用Scala语言写成,同时提供了S ...
- 用scala的actor并发编程写一个单机版的WorldCount
前言:最近一段时间比较忙,也是比较懒了吧,好长时间没写博客了,新的一年到来,给自己一个小目标,博客坚持写下去,分享一下这历程!废话不多说,开始正题咯(希望大家喜欢!) 首先这算是一个scala程序的入 ...
- 4、Java并发性和多线程-并发编程模型
以下内容转自http://ifeve.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B%E6%A8%A1%E5%9E%8B/: 并发系统可以采用多种并发编程模型来实现. ...
- java 多线程——并发编程模型 学习笔记
并发编程模型 ...
- Java并发编程的艺术读书笔记(2)-并发编程模型
title: Java并发编程的艺术读书笔记(2)-并发编程模型 date: 2017-05-05 23:37:20 tags: ['多线程','并发'] categories: 读书笔记 --- 1 ...
- Reactor 模型(一)基本并发编程模型
Reactor 模型(一)基本并发编程模型 Netty 系列目录 (https://www.cnblogs.com/binarylei/p/10117436.html) 在讲解 Reactor 线程模 ...
- Scala 并行和并发编程-Futures 和 Promises【翻译】
官网地址 本文内容 简介 Futures 阻塞 异常 Promises 工具 最近看了<七周七语言:理解多种编程泛型>,介绍了七种语言(四种编程范型)的主要特性:基本语法,集合,并行/并发 ...
随机推荐
- 洛谷P4630 [APIO2018]铁人两项 [广义圆方树]
传送门 又学会了一个新东西好开心呢~ 思路 显然,假如枚举了起始点\(x\)和终止点\(y\),中转点就必须在它们之间的简单路径上. 不知为何想到了圆方树,可以发现,如果把方点的权值记为双联通分量的大 ...
- iOS UIDatePicker设置为中文的方法
UIDatePicker *datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 20, 200, 30)]; datePick ...
- Confluence 6 使用电子邮件可见
Confluence 提供了 3 个电子邮件策略,这些策略 Confluence 管理员可以通过管理员控制台(Administration Console)进行配置: 公开(Public):电子邮件地 ...
- Java 8 中的 Lambda 表达式
Lambda 表达式是 Java 8 最受欢迎的功能.人们将函数式编程的概念引入了 Java 这门完全面向对象的命令式编程语言. 关于函数式编程是如何运作的,这个话题超出了本文的范围,不过我们会提炼出 ...
- 在lnmp环境下,将原来的PHP7.0升级到PHP7.2
基础环境: 系统:centos6.8 环境:lnmp 停止PHP7.0的版本,在做如下操作: 1.下载php-7.2.6.tar.bz2软件包放在/opt 路径下 mkdir /usr/local ...
- Oracle索引(Index)介绍使用
1.什么是引 索引是建立在表的一列或多个列上的辅助对象,目的是加快访问表中的数据:Oracle存储索引的数据结构是B*树,位图索引也是如此,只不过是叶子节点不同B*数索引:索引由根节点.分支节点和叶子 ...
- Asp.Net MVC Ajax轮训解决Session失效时间
这种方法不是太好,对服务器得压力大,由于系统是内部人员使用,业务有比较复杂,所以有些值得需要Session去保存,但是,Session有失效时间. 代码如下: $(function () { func ...
- github协作开发遇到的问题
1.十一来了,帝都不好买票,30号就调休一天回去了,项目还没搞完,紧张的不行,就自己和同事搞了一个github协作开发,由于是功能和公司项目不是很沾边,但是是自己的主要工作,就和同事协调了一下,搭建了 ...
- 利用 Windows API Code Pack 修改音乐的 ID3 信息
朋友由于抠门 SD 卡买小了,结果音乐太多放不下,又不舍得再买新卡,不得已决定重新转码,把音乐码率压低一点,牺牲点音质来换空间(用某些人的话说,反正不是搞音乐的,听不出差别)… 结果千千静听(百度音乐 ...
- Azure 国内版 如何用powershell修改linux系统的密码
国内版不像国际版本那样,一个UI按钮就解决问题,国内版很多功能上线比较慢,我们只能用powershell工具进行命令行 式的更改,也当温习一下命令了,好久不用了. $vm = Get-AzureVM ...