15. Scala併發編程模型Akka

15.1 Akka介紹

      1) Akka是Java虛擬機JVM平臺上構建高併發、分佈式和容錯應用的工具包和運行時,能夠理解成Akka是編寫併發程序的框架程序員

      2) Akka用Scala語言寫成,同時提供了Scala和Java的開發接口ajax

      3) Akka主要解決的問題是:能夠輕鬆的寫出高效穩定的併發程序,程序員再也不過多的考慮線程、鎖和資源競爭等細節編程

15.2 Actor模型用於解決什麼問題 

      1) 處理併發問題關鍵是要保證共享數據的一致性和正確性,由於程序是多線程時,多個線程對同一個數據進行修改,若不加同步條件,勢必會形成數據污染。可是當咱們對關鍵代碼加入同步條件synchronized後,實際上大併發就會阻塞在這段代碼,對程序效率有很大影響多線程

      2) 如果用單線程處理,不會有數據一致性的問題,可是系統的性能又不能保證架構

      3) Actor模型的出現解決了這個問題,簡化併發編程,提高程序性能。能夠理解成Actor模型是一種處理併發問題的解決方案併發

15.3 Akka中的Actor模型

  15.3.1 Actor模型及其說明 

  

      1) Akka處理併發的方法基於Actor模型(示意圖)框架

      2) 在基於Actor的系統裏,全部的事物都是Actor,就好像在面向對象設計裏面全部的事物都是對象同樣異步

      3) Actor模型是做爲一個併發模型設計和架構的。Actor與Actor之間只能經過消息通訊,如圖的信封分佈式

      4) Actor與Actor之間只能用消息進行通訊,當一個Actor給另外一個Actor發消息,消息是有順序的(消息隊列),只須要將消息投寄到相應的郵箱便可高併發

      5) 怎麼處理消息是由接收消息的Actor決定的,發送消息Actor能夠等待回覆,也能夠異步處理[ajax]

      6) ActorSystem的職責是負責建立並管理其建立的Actor,ActorSystem是單例的(ActorSystem是一個工廠,專門建立Actor),一個JVM進程中有一個便可,而 Acotr是能夠有多個的

      7) Actor模型是對併發模型進行了更高的抽象 

      8) Actor模型是異步、非阻塞、高性能的事件驅動編程模型 

      9) Actor模型是輕量級事件處理(1GB 內存可容納百萬級別個Actor),所以處理大併發性能高 

15.4 Actor模型工做機制說明

      -說明了Actor模型的工做機制(對應上圖)

        1) ActorySystem建立Actor

        2) ActorRef:能夠理解成是Actor的代理或者引用。消息是經過ActorRef來發送,而不能經過Actor發送消息,經過哪一個ActorRef發消息,就表示把該消息發給哪一個Actor

        3) 消息發送到Dispatcher Message(消息分發器),它獲得消息後,會將消息進行分發到對應的MailBox。(注:Dispatcher Message能夠理解成是一個線程池,MailBox能夠理解成是消息隊列,能夠緩衝多個消息,遵照FIFO)

        4) Actor能夠經過receive方法來獲取消息,而後進行處理

      -Actor模型的消息機制(對應上圖)

        1) 每個消息就是一個Message對象,Message繼承了Runable,由於Message就是線程類

        2) 從Actor模型工做機制看上去很麻煩,可是程序員編程時只須要編寫Actor就能夠了,其它的交給Actor模型完成便可

        3) A Actor要給B Actor發送消息,那麼A Actor要先拿到(也稱爲持有)B Actor的代理對象ActorRef才能發送消息

相關文章
相關標籤/搜索