一、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的更多相关文章

  1. Scala进阶之路-并发编程模型Akka入门篇

    Scala进阶之路-并发编程模型Akka入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Akka Actor介绍 1>.Akka介绍 写并发程序很难.程序员不得不处 ...

  2. Scala并发编程模型AKKA

    一.并发编程模型AKKA Spark使用底层通信框架AKKA 分布式 master worker hadoop使用的是rpc 1)akka简介 写并发程序很难,AKKA解决spark这个问题. akk ...

  3. 15. Scala并发编程模型Akka

    15.1 Akka介绍 1) Akka是Java虚拟机JVM平台上构建高并发.分布式和容错应用的工具包和运行时,可以理解成Akka是编写并发程序的框架 2) Akka用Scala语言写成,同时提供了S ...

  4. 用scala的actor并发编程写一个单机版的WorldCount

    前言:最近一段时间比较忙,也是比较懒了吧,好长时间没写博客了,新的一年到来,给自己一个小目标,博客坚持写下去,分享一下这历程!废话不多说,开始正题咯(希望大家喜欢!) 首先这算是一个scala程序的入 ...

  5. 4、Java并发性和多线程-并发编程模型

    以下内容转自http://ifeve.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B%E6%A8%A1%E5%9E%8B/: 并发系统可以采用多种并发编程模型来实现. ...

  6. java 多线程——并发编程模型 学习笔记

                                                                                                 并发编程模型 ...

  7. Java并发编程的艺术读书笔记(2)-并发编程模型

    title: Java并发编程的艺术读书笔记(2)-并发编程模型 date: 2017-05-05 23:37:20 tags: ['多线程','并发'] categories: 读书笔记 --- 1 ...

  8. Reactor 模型(一)基本并发编程模型

    Reactor 模型(一)基本并发编程模型 Netty 系列目录 (https://www.cnblogs.com/binarylei/p/10117436.html) 在讲解 Reactor 线程模 ...

  9. Scala 并行和并发编程-Futures 和 Promises【翻译】

    官网地址 本文内容 简介 Futures 阻塞 异常 Promises 工具 最近看了<七周七语言:理解多种编程泛型>,介绍了七种语言(四种编程范型)的主要特性:基本语法,集合,并行/并发 ...

随机推荐

  1. swift 学习- 18 -- 自动引用计数

    // Swift 使用 自动引用计数 (ARC) 机制来跟踪和管理你的应用程序的内存, 通常情况下, Swift 内存管理机制会一直起作用, 你无须自己来考虑内存的管理, ARC 会在类的实例不再被使 ...

  2. Vmware Workstation _linux yum 仓库搭建

    0:检查 vm虚拟机光盘是否已经连接 1. 检测yum 仓库是否已经配置好 [root@oracle ~]# yum list all 如果输入这条指令可以正确显示出rpm 包的列表,则说明yum 仓 ...

  3. Confluence 6 手动备份站点

    Confluence 被配置自动备份数据,使用压缩的 XML 格式.同时你也可以通过 Confluence 的 管理员控制台(Administration Console)手动进行备份. 你需要具有 ...

  4. Confluence 6 修改你站点的外观和感觉

    你可以为你的 Confluence 整个站点修改表现以及外观和感觉,也可以为单独的空间进行修改. 对整个站点进行的修改将会对使用全局外观和感觉(look and feel)的空间一并进行修改.如果某个 ...

  5. Java语法基础常见疑惑解答8,16,17,21图片补充

    8. 16. 17. 21

  6. mysql 安装问题三:FATAL ERROR: please install the following Perl modules before executing ./scripts/mysql_install_db: Data::Dumper

    解决方法是安装autoconf库,执行命令:yum -y install autoconf 安装完成之后继续执行安装mysql的命令:./scripts/mysql_install_db --user ...

  7. cf1084d 非常巧妙的树形dp

    /* 给定n城市,m条道路,每条路耗油w,每个点有油a[i],从任意点出发,求最大可以剩下的油 dp[i]表示从i开始往下走的最大收益,ans表示最大结果 因为走过的路不能走,所以可以想到最优解肯定经 ...

  8. Centos系统压力测试 ab 命令安装与使用

    Apache安装包中自带的压力测试工具 Apache Benchmark(简称ab) 简单易用,这里就采用 ab作为压力测试工具了. 1.独立安装 ab运行需要依赖apr-util包,安装命令为: y ...

  9. python2.7 (x64) 调用 java 代码实践

    背景:公司实施接口自动化测试,使用的框架python+unittest:因为开发使用的架构师SpringBoot,在测试过程中难免需要使用到python调用JAVA的一些接口,所以需要用到python ...

  10. Loadrunner Web (HTTP/HTML) 接口测试

    Action() { int nHttpRetCode;   lr_rendezvous("read"); lr_start_transaction("go    /*w ...