1) Akka是Java虛擬機JVM平臺上構建高併發、分佈式和容錯應用的工具包和運行時,能夠理解成Akka是編寫併發程序的框架程序員
2) Akka用Scala語言寫成,同時提供了Scala和Java的開發接口ajax
3) Akka主要解決的問題是:能夠輕鬆的寫出高效穩定的併發程序,程序員再也不過多的考慮線程、鎖和資源競爭等細節編程
1) 處理併發問題關鍵是要保證共享數據的一致性和正確性,由於程序是多線程時,多個線程對同一個數據進行修改,若不加同步條件,勢必會形成數據污染。可是當咱們對關鍵代碼加入同步條件synchronized後,實際上大併發就會阻塞在這段代碼,對程序效率有很大影響多線程
2) 如果用單線程處理,不會有數據一致性的問題,可是系統的性能又不能保證架構
3) Actor模型的出現解決了這個問題,簡化併發編程,提高程序性能。能夠理解成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),所以處理大併發性能高
-說明了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才能發送消息