经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Scala » 查看文章
Scala-Unit7-Scala并发编程模型AKKA
来源:cnblogs  作者:给你一个公主抱  时间:2019/1/21 9:42:08  对本文有异议

一、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:我对自己发送消息,并处理消息

  1. //创建CallMe类继承Actor,它包含了对消息处理的业务逻辑
  2. class CallMe extends Actor{
  3. //重写recevie方法,负责接收和处理消息
  4. override def receive: Receive = {
  5. case "Hunter is cool" => println("You are Right")
  6. case "Hunter is ugly" => println("You are wrong")
  7. case "stop" => {
  8. //关闭代理ActorRef
  9. context.stop(self)
  10. //关闭ActorSystem
  11. context.system.terminate()
  12. }
  13. }
  14. }
  15.  
  16. object CallMe {
  17. //1.创建ActorSystem对象
  18. private val acFactory = ActorSystem("AcFactory")
  19. //2.调用ActorSystem对象的ActorOf方法,创建代理callRef
  20. private val callRef = acFactory.actorOf(Props[CallMe],"CallMe")
  21.  
  22. def main(args: Array[String]): Unit = {
  23. //3.发送消息, !代表发送的意思
  24. callRef ! "Hunter is cool"
  25. callRef ! "Hunter is ugly"
  26. callRef ! "stop"
  27. }
  28. }

  

  2.需求2:男孩和女孩的对话模拟

  1. class BoyActor(val b:ActorRef) extends Actor{
  2. override def receive: Receive = {
  3. case "你好,mm" => {
  4. b ! "你好,mm"
  5. }
  6. case "你好,gg" => {
  7. println("你好,gg")
  8. b ! "我能约你吃饭么?"
  9. }
  10. case "叔叔,我们不约!" =>{
  11. println("叔叔,我们不约!")
  12. context.stop(self)
  13. context.system.terminate()
  14. }
  15. }
  16. }
  17.  
  18. class GirlActor(val g:ActorRef) extends Actor{
  19. override def receive: Receive = {
  20. case "你好,mm" =>{
  21. println("你好,mm")
  22. g ! "你好,gg"
  23. }
  24. case "我能约你吃饭么?" =>{
  25. println("我能约你吃饭么?")
  26. g ! "叔叔,我们不约!"
  27. }
  28. }
  29. }
  30.  
  31. object WeChat {
  32. private val weChat = ActorSystem("WeChat")
  33. private val boyRef: ActorRef = weChat.actorOf(Props(new BoyActor(girlRef)),"Boy")
  34. private val girlRef: ActorRef = weChat.actorOf(Props(new GirlActor(boyRef)),"Girl")
  35.  
  36. def main(args: Array[String]): Unit = {
  37. boyRef ! "你好,mm"
  38. }
  39. }

   运行结果:

   

 

  

原文链接:http://www.cnblogs.com/HelloBigTable/p/10293897.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号