日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Scala _10Actor Model

發(fā)布時(shí)間:2024/2/28 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Scala _10Actor Model 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
  • 概念理解

Actor Model是用來(lái)編寫(xiě)并行計(jì)算或分布式系統(tǒng)的高層次抽象(類似java中的Thread)讓程序員不必為多線程模式下共享鎖而煩惱,被用在Erlang 語(yǔ)言上, 高可用性99.9999999 % 一年只有31ms 宕機(jī)Actors將狀態(tài)和行為封裝在一個(gè)輕量的進(jìn)程/線程中,但是不和其他Actors分享狀態(tài),每個(gè)Actors有自己的世界觀,當(dāng)需要和其他Actors交互時(shí),通過(guò)發(fā)送事件和消息,發(fā)送是異步的,非堵塞的(fire-andforget),發(fā)送消息后不必等另外Actors回復(fù),也不必暫停,每個(gè)Actors有自己的消息隊(duì)列,進(jìn)來(lái)的消息按先來(lái)后到排列,這就有很好的并發(fā)策略和可伸縮性,可以建立性能很好的事件驅(qū)動(dòng)系統(tǒng)。

  • Actor的特征:
  • ActorModel是消息傳遞模型,基本特征就是消息傳遞
  • 消息發(fā)送是異步的,非阻塞的
  • 消息一旦發(fā)送成功,不能修改
  • Actor之間傳遞時(shí),自己決定決定去檢查消息,而不是一直等待,是異步非阻塞的
  • ? ? ?? 什么是Akka

    Akka 是一個(gè)用 Scala 編寫(xiě)的庫(kù),用于簡(jiǎn)化編寫(xiě)容錯(cuò)的、高可伸縮性的 Java 和Scala 的 Actor 模型應(yīng)用,底層實(shí)現(xiàn)就是Actor,Akka是一個(gè)開(kāi)發(fā)庫(kù)和運(yùn)行環(huán)境,可以用于構(gòu)建高并發(fā)、分布式、可容錯(cuò)、事件驅(qū)動(dòng)的基于JVM的應(yīng)用。使構(gòu)建高并發(fā)的分布式應(yīng)用更加容易。

    spark1.6版本之前,spark分布式節(jié)點(diǎn)之間的消息傳遞使用的就是Akka,底層也就是actor實(shí)現(xiàn)的。1.6之后使用的netty傳輸。

    package com.henu.scala13Actorimport scala.actors.Actorclass myActor extends Actor{def act(): Unit ={while (true){receive {case x: String => println("get String = " + x)case x: Int => println("get Int = " + x)case _=> println("get default")}}} } object ActorDemo {def main(args: Array[String]): Unit = {//創(chuàng)建actor的消息接收和傳遞val actor = new myActor//啟動(dòng)actor.start()//發(fā)送消息寫(xiě)法actor ! "george love kk"} }
    • 例:Actor與Actor之間通信
    package com.henu.scala13Actorimport scala.actors.Actorcase 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 ActorDemo02 {def main(args: Array[String]): Unit = {val actor1 = new Actor1()actor1.start()val actor2 = new Actor2(actor1)actor2.start()} }

    ?

    總結(jié)

    以上是生活随笔為你收集整理的Scala _10Actor Model的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。