Scala深入浅出实战第67讲:Scala并发编程匿名Actor、消息传递、偏函数实战解析及其在Spark源码中的应用解析

时间:2021-11-30 19:58:42

  本期视频通过代码实战详解了Scala并发编程匿名Actor、消息传递、偏函数实战解析及其在Spark源码中的应用解析:(1)匿名Actor是通过Actor伴生对象的actor方法直接创建和启动的,不像Actor的子类需要调用自己的start方法才正式启动。(2)消息传递(发送消息和接受消息)是Actor的核心,发送消息常使用 ! 操作符实现,例如 actor !"hello,Scala" ,其中 "hello,Scala"是要被发送的消息内容,actor对象是接受消息的Actor的子类对象。actor对象接受消息都被存放在自己的一个“邮箱”里面,这时需要通过一个receive方法来处理其中的每一条消息,这里需要注意一点,receive方法会忽略掉无法匹配自己内部的偏函数的消息。(3)Spark框架的消息驱动系统采用的是基于Actor的Akka通信框架,其中常用的Master和Worker两个类都是实现了Actor的子类,这两个类的消息传递原理与Scala的Actor消息传递原理基本一样。

实战代码:

object ActorTest2 {  

  def main(args:Array[String]){        

    val actor_message= actor{      

      while(true){        

        receive{          

           case msg:String =>println("actor receive message:"+msg)         }       }     }        

    val double_message=actor{      

      while(true){

    //偏函数 apply isDefinedAt会判断每个传递进来的消息能不能被接收处理,能则返回true,否则返回false,       

      //当返回true时,执行case;返回false时,不执行,忽略这个消息        

        receive{          

           case msg:Double=>println("double message:"+msg)          

           case _=>println("Something unkown")         }       }     }   

     actor_message ! "spark"   

     double_message ! Math.PI   

    Actor_test.start   

    Actor_test ! "hadoop"   }   }

    object Actor_test extends Actor{   def act(){     while(true){         receive{           case msg:String =>println("Actor class receive message:"+msg)         }       }   } }

 重磅!王家林亲授《DT大数据梦工厂》大数据实战视频“Scala深入浅出实战(1-67讲)”全部视频、音频、代码和PPT下载地址:

百度云盘:http://pan.baidu.com/share/home?uk=4013289088#category/type=0&qq-pf-to=pcqq.group

DT大数据梦工厂 QQ群号1:462923555    QQ群号2: 437123764    QQ群号3:418110145

    欢迎您加入DT大数据梦工厂的QQ群,在群里共同探讨大数据方面的技术,也非常希望您在QQ群里面提出学习过程中遇到的问题,我们的公益团队会对每天群里面提出的问题进行整理并以书面的方式进行解答,最后分享到QQ群文件里。