美文网首页Spark
Scala的Actor模型

Scala的Actor模型

作者: geekAppke | 来源:发表于2018-12-10 16:17 被阅读57次
Actor 是编写并行计算或分布式系统的高层次抽象(类似java中的Thread线程)
让程序员不必为多线程模式下为共享锁而烦恼

每个Actors有自己的世界观
当需要和其他Actors交互时,通过发送事件和消息,发送是异步的,非堵塞的(fire-andforget)
发送消息后不必等另外Actors回复,也不必暂停

每个Actors有自己的消息队列
进来的消息按先来后到排列,这就有很好的并发策略和可伸缩性,可以建立性能很好的事件驱动系统

Actor 相等于我们理解的线程,Thread
Spark底层节点之间的通信使用的Akka通信模式
Akka就是Actor实现的

Actor Model

  • ActorModel是消息传递模型,基本特征就是消息传递
  • 消息发送是异步的,非阻塞的
  • 消息一旦发送成功,不能修改
  • Actor之间传递时,自己决定去检查消息,而不是一直等待,是异步非阻塞的

1、Actor简单发送接收消息

Spark底层的通信模型

import scala.actors.Actor

class myActor extends Actor {
  override def act(): Unit = {
    receive {
      case x:String => println("save String ="+ x)
      case x:Int => println("save Int")
      case _ => println("save default")
    }
  }
}

object Lesson_Actor {
  def main(args: Array[String]): Unit = {
    // 创建actor的消息接收和传递
    val actor =new myActor()
    // 启动
    actor.start()
    // 发送消息写法
    actor ! "i love you !"
  }
}

2、Actor与Actor之间的通信

case class Message(actor:Actor, msg:Any)

class Actor1 extends Actor {
  def act() {
    while(true) {
      receive{
        case msg :Message => {
             println("i sava msg ! = "+ msg.msg)
             msg.actor ! "i love you too !"
          }
        case msg :String => println(msg)
        case  _ => println("default msg!")
      }
    }
  }
}

class Actor2(actor :Actor) extends Actor {
   actor ! Message(this,"i love you !")
   def act() {
      while(true) {
         receive {
            case msg :String => {
               if(msg.equals("i love you too !")) {
                  println(msg)
                  actor! "could we have a date !"
               }
            }
            case  _ => println("default msg!")
         }
      }
   }
}

object Lesson_Actor2 {
  def main(args: Array[String]): Unit = {
    val actor1 = new Actor1()
    actor1.start()
    val actor2 = new Actor2(actor1)
    actor2.start()
  }
}
  • while(true){ }一直处于接收消息的状态!不会运行1次就结束了!

什么是Akka

Akka 是用 Scala 编写的库,用于简化编写容错的、高可伸缩性的 Java 和Scala 的 Actor 模型应用,底层实现就是Actor,Akka是一个开发库和运行环境,可以用于构建高并发、分布式、可容错、事件驱动的基于JVM的应用。使构建高并发的分布式应用更加容易。
spark1.6版本之前,spark分布式节点之间的消息传递使用的就是Akka,底层也就是actor实现的。1.6之后使用的netty传输。

Scala学习笔记导航

相关文章

  • Scala编程详解18:Actor入门

    Scala的Actor类似于Java中的多线程编程。但是不同的是,Scala的Actor提供的模型与多线程有所不同...

  • [8] - Actor 与并发

    Actor 是 Scala 基于消息传递的并发模型,虽然自 Scala-2.10 其默认并发模型的地位已被 Akk...

  • Scala的Actor模型

    Actor Model ActorModel是消息传递模型,基本特征就是消息传递 消息发送是异步的,非阻塞的 消息...

  • IOT开源数据平台Thingsboard源码分析(三)-Acto

    Actor模型在异步处理中使用广泛,尤其是scala语言中actor框架的使用。本篇主要介绍thingsboard...

  • Scala编程:Actor入门

    Actor入门 引言 Scala的Actor类似于Java中的多线程编程。但是不同的是,Scala的Actor提供...

  • Actor 编程

    注:我们现在学的Scala Actor是scala 2.10.x版本及以前版本的Actor。Scala在2.11....

  • thingsboard actor消息处理流程

    Actor模型在异步处理中使用广泛,尤其是scala[https://so.csdn.net/so/search?...

  • Scala学习笔记:Actor & Future

    关于scala的Actor和经常配合使用的Future Actor Creating Actor & best p...

  • [xactor]学习笔记--序

    最近学习CSP模型和actor模型,actor模型没有玩过。所以开始学习。actor模型在rust语言下有 Xac...

  • Actor模型

    Actor模型本质上是一种计算模型,基本的计算单元称为Actor。在Actor模型中,所有的计算都是在Actor中...

网友评论

    本文标题:Scala的Actor模型

    本文链接:https://www.haomeiwen.com/subject/trrrhqtx.html