Akka是由各種角色和功能的Actor組成的,工作的主要原理是把一項(xiàng)大的計(jì)算任務(wù)分割成小環(huán)節(jié),再按各環(huán)節(jié)的要求構(gòu)建相應(yīng)功能的Actor,然后把各環(huán)節(jié)的運(yùn)算托付給相應(yīng)的Actor去獨(dú)立完成。Akka是個(gè)工具庫(kù)(Tools-Library),不是一個(gè)軟件架構(gòu)(Software-Framework),我們不需要按照Akka的框架格式去編寫程序,而是直接按需要構(gòu)建Actor去異步運(yùn)算一項(xiàng)完整的功能,這樣讓用戶在不知不覺(jué)中自然的實(shí)現(xiàn)了多線程并發(fā)軟件編程(concurrent programming)。按這樣的描述,Actor就是一種靠消息驅(qū)動(dòng)(Message-driven)的運(yùn)算器,我們可以直接調(diào)用它來(lái)運(yùn)算一段程序。消息驅(qū)動(dòng)模式的好處是可以實(shí)現(xiàn)高度的松散耦合(loosely-coupling),因?yàn)橄到y(tǒng)部件之間不用軟件接口,而是通過(guò)消息來(lái)進(jìn)行系統(tǒng)集成的。消息驅(qū)動(dòng)模式支持了每個(gè)Actor的獨(dú)立運(yùn)算環(huán)境,又可以在運(yùn)行時(shí)按需要靈活的對(duì)系統(tǒng)Actor進(jìn)行增減,伸縮自如,甚至可以在運(yùn)行時(shí)(runtime)對(duì)系統(tǒng)部署進(jìn)行調(diào)配。Akka的這些鮮明的特點(diǎn)都是通過(guò)消息驅(qū)動(dòng)來(lái)實(shí)現(xiàn)的。

曾經(jīng)看到一個(gè)關(guān)于Actor模式的觀點(diǎn):認(rèn)為Actor并不適合并發(fā)(concurrency)編程,更應(yīng)該是維護(hù)內(nèi)部狀態(tài)的運(yùn)算工具。聽(tīng)起來(lái)好像很無(wú)知,畢竟Actor模式本身就是并發(fā)模式,如果不適合并發(fā)編程,豈不與Akka的發(fā)明意愿相左。再仔細(xì)研究了一下這個(gè)觀點(diǎn)的論述后就完全認(rèn)同了這種看法。在這里我們分析一下這種論述,先看看下面這段Actor用法偽代碼:

移動(dòng)開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機(jī)開發(fā)培訓(xùn),手機(jī)維修培訓(xùn),手機(jī)軟件培訓(xùn)

 class QueryActor extends Actor {    override def receive: Receive = {      case GetResult(query) => 
        val x = db.RunQuery(query)
        val y = getValue(x)
        sender() ! computeResult(x,y)
    }
  }
  val result: Future[Any] = QueryActor ? GetResult(...)

延伸閱讀

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