一、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" } }
运行结果:
原文地址:https://www.cnblogs.com/HelloBigTable/p/10293897.html
时间: 2024-11-08 16:39:32