第十七课:Scala并发编程实战

其实我们可以发现,我们一直处在并发编程的世界里

 

Spark 有以前是使用Akka的,Akka是对Scala的Actor进行了封装

Scala的Actor有点像邮件,一个人发邮件到邮箱,另外一个人可以接收到邮件进行处理,处理之后回复邮件,

其实Scala的Actor是非常像邮件的

其实Spark用的是多台机器的并发编程,它的实质和单台机器的并发编程没有太大的区别,只不过多台机器的并发编程需要一个框架来管理,

例如怎么知道Master,Worker是谁,怎么去找地址

 

在Spark的源码中,我们可以看到EventLoop也是一种并发编程,只不过这和Worker,Master的并发编程有所不一样

 

Actor其实就是内部有一个消息队列,不断地循环这个消息队列,待消息处理完成之后,该消息就会消失

 

例子:

package com.dt.spark.scala.basics

 

import scala.actors.Actor

 

object HelloActor {

 

  def main(args: Array[String]) {

    val helloActor=new HelloActor()

    helloActor.start()

    var helloBackActor=new HelloBackActor(helloActor)

    helloBackActor.start()

    var i=0

//    while(true){

//      i += 1

//      helloActor ! i+""

//      Thread.sleep(1000)

//    }

//    helloActor ! Hello("Spark","Dollor")

//    helloActor ! HelloBack("Spark","Dollor")

  }

}

 

case class Hello(name:String,content:String,sender:Actor)

case class HelloBack(name:String,content:String,sender:Actor)

 

class HelloActor extends Actor {

  var counter:Int=0

  override def act() {

    while (true) {

      receive {

        case Hello(name,content,sender) =>

          println("Hello,"+name+":" + content)

          counter += 1

           Thread.sleep(1000)

          sender ! HelloBack(name,content+counter,this)

      }

    }

  }

}

 

class HelloBackActor(val actor:Actor) extends Actor {

  var counter:Int=0

  override def act() {

    actor ! Hello("Spark","Dollor",this)

    while (true) {

      receive {

        case HelloBack(name,content,sender) =>

          println("Hello,"+name+":" + content)

          counter += 1

          Thread.sleep(1000)

          sender ! Hello(name,content+counter,this)

      }

    }

  }

}

 

!是异步的,!?就是同步的方式,必须等到对方给你回复才继续工作

 

归纳总结:1.Scala的Actor的大概原理

2.多台机器的并发编程和单台机器的并发编程

3.看一下Spark 的 EventLoop

4.例子

 

转载于:https://my.oschina.net/u/1449867/blog/729808

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值