在開始討論Akka中對Actor的生命周期管理前,我們先探討一下所謂的Actor編程模式。對比起我們習(xí)慣的行令式(imperative)編程模式,Actor編程模式更接近現(xiàn)實中的應(yīng)用場景和功能測試模式。這是因為Actor是靠消息來驅(qū)動的,每種消息代表一項功能的運算指令。由于消息驅(qū)動式的程序是松散耦合的,每項功能都是在獨立的線程中運算,互不干擾依賴,所以我們可以很自然的分開來實現(xiàn)各項功能以及獨立測試每項功能。雖然Akka同時提供了Java和Scala兩種API,但可能由于Akka本身是用Scala開發(fā)的,所以感覺用Scala來開發(fā)Akka程序會更自然些:籠統(tǒng)來講,Actor編程主要就是對receive函數(shù)的實現(xiàn)。而receive函數(shù)就是幾個普通的功能函數(shù)用模式匹配的方式按消息類型進(jìn)行調(diào)用。receive函數(shù)所調(diào)用的功能函數(shù)可以是任何JVM兼容語言函數(shù),由于每個Actor的運算都在自己獨立的線程里進(jìn)行,所以我們不必?fù)?dān)心Actor函數(shù)在運行中的交叉調(diào)用問題。Akka程序本就是一種原生的多線程程序,每個Actor都在一個自己的線程內(nèi)獨立運算它的receive函數(shù)。除此之外Actor的運算環(huán)境可以在任何不同的JVM里,只要Akka信息發(fā)送能實現(xiàn)跨JVM投遞的話,實現(xiàn)分布式程序也是自然而然的事了。所以,理論上Akka編程初學(xué)者應(yīng)該把主要注意力放在這個receive函數(shù)的實現(xiàn)上來,按照一種模版式的方式來編寫Akka程序就可以了,如下面演示的這個模版例子:

電腦培訓(xùn),計算機(jī)培訓(xùn),平面設(shè)計培訓(xùn),網(wǎng)頁設(shè)計培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

import akka.actor._object MyActor { //在這個伴生對象里申明MyActor所支持的功能指令
  sealed trait ActorCommands  case object RunFuncA extends ActorCommands  case object RunFuncB extends ActorCommands
}//假設(shè)有funcA,funcB. 它們可以從任何JVM函數(shù)庫里調(diào)用val funcA : () => Any = ???val funcB : () => Any = ???class MyActor extends Actor {
  import MyActor._  var stateValue: Any = _    //內(nèi)部狀態(tài),代表這個Actor的當(dāng)前運算結(jié)果
  override def receive: Receive = {    case RunFuncA => stateValue = funcA   //運算funcA,更新stateValue
    case RunFuncB => stateValue = funcB    //運算funcB,更新stateValue    ...
  }
}

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運,軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式