Scala并发编程模型AKKA

关键字

1)final
如果方法不想被重写可以使用final关键字进行修饰
用final修饰的:
类:类不能被继承
方法:不能被重写
val

2)type
别名设置
使我们的程序变得更灵活
T

trait b {
  type T
  def go(str:T)={
    println(str)
  }
}
object test  extends b {
  override type T = String
  def main(args: Array[String]): Unit = {
    test.go("ycf")
  }
}

样例类&样例对象

1)样例类
样例类支持模式匹配
写法:case class 类名(属性…)

case class Boy(high:Int)
case class Girl(high:Int)
object Test extends App {
  def getmatch(obj:Any)= obj match {
    case Boy(x)=>print(x)
    case Girl(x)=>print(x)
  }
  getmatch(Boy(155))
}

2)样例对象

写法:case object 类名(属性…)
不能封装数据
支持模式匹配

case object Check 
 
match{ 
    case "Check" => println(Check) 
} 

样例类,模式匹配,偏函数

https://www.jianshu.com/p/bd01f88b6c33

并发编程模型AKKA

Spark使用底层通信框架AKKA
分布式
master
worker

hadoop使用的是rpc

1)akka简介

写并发程序很难,AKKA解决spark这个问题。

akka构建在JVM平台上,是一种高并发、分布式、并且容错的应用工具包

akka用scala语言编写同时提供了scala和java的开发接口

akka可以开发一些高并发程序。

2)Akka的Actor模型

akka处理并发的方法基于actor模型
在基于actor的系统中,所有事物都是actor。
actor作为一个并发模型设计和架构的,面向对象不是。
actor与actor之间只能通过消息通信。

Akka特点:
(1)对并发模型进行了更高的抽象
(2)异步、非阻塞、高性能的事件驱动编程模型
(3)轻量级事件处理(1G内存可以容纳百万级别的Actor)
同步:阻塞(发消息 一直等待消息)
异步:不阻塞(发消息 不等待 该干嘛干嘛)

actor简化了并发编程,提高了程序性能。

Actor

Scala并发编程模型AKKA_第1张图片

Actor工作机制
Scala并发编程模型AKKA_第2张图片

class ZioAcrot(h: ActorRef) extends Actor{
  override def receive: Receive = {
    case "我是假面骑士zio" =>
      h ! "你好,我是假面骑士"
  }
}

class MeActor extends Actor{
  override def receive: Receive = {
      case "你好,我是假面骑士" => println("好巧,我也是")
      case "我打不赢你" => println("是的")
  }
}

object AkkaDrive {
  //通过ActorSystem创建Actor
  private val akdr = ActorSystem("akdr")
  //Actor通过AcrotRef通信
  private val me_actor = akdr.actorOf(Props[MeActor],"meactor")

  private val zio_actor = akdr.actorOf(Props(new ZioAcrot(me_actor)),"zioactor")

  def main(args: Array[String]): Unit = {
    zio_actor ! "我是假面骑士zio"
  }
}

好巧,我也是

所以发送给另一个Actor的邮箱我们只需要拿到他的代理,按先进先出队列处理

你可能感兴趣的:(Scala)