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

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

移動開發(fā)培訓,Android培訓,安卓培訓,手機開發(fā)培訓,手機維修培訓,手機軟件培訓

 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(...)

網友評論