Actor_更輕量化的併發處理模型

Actor_更輕量化的併發處理模型react


JAVA在JDK5以前寫併發程序是很是麻煩的,你要麼繼承Thread類,要麼實現Runnable接口,同步機制的力粒度也很粗。JDK5以後,引入了Concurrent包,增長了不少併發特性的支持,如Callable<T>接口,可使用Future<T>來獲取每一個任務返回的結果,而原來的Runnable是沒有這個能力的。還有就是更細粒度的鎖,如Lock接口。程序員


Actor Model最先是在上世紀70-80年代就被提出來了,是用來編寫並行計算或分佈式系統的高層次抽象,讓程序員沒必要爲多線程模式下共享鎖而煩惱, Erlang 最早實現Actor Model,SCALA參考了這個實現。多線程


Actors將狀態和行爲封裝在一個輕量的進程/線程中,可是不和其餘Actors分享狀態,每一個Actors有本身的封閉環境,當須要和其餘Actors交互時,經過發送事件和消息,發送是異步的,非堵塞的(fire-and-forget),發送消息後沒必要等另外Actors回覆,也沒必要暫停,每一個Actors有本身的消息隊列,進來的消息按先來後到排列,這就有很好的併發策略和可伸縮性,能夠創建性能很好的事件驅動系統。架構


SCALA實現Actor Model有兩種實現方式:併發

  • 基於線程的實現:相似JAVA中的thread方式,經過定義一個thread-specific方法(Scala中的Actor類的actor方法/JAVA中的Thread類的run方法),將一個線程和actor綁定;框架

  • 基於事件的實現:經過定義一個線程池和一系列的事件處理函數,將事件處理函數做爲actor方法,實現多個actor共享一個線程池;異步

一般狀況下兩種實現模型各有本身的優缺點,線程模型簡單易用,但效率不高;而事件模型高效但難於設計。爲了適應這兩種模型,Scala的Actor庫實現了兩個不一樣操做:receive和react,兩個操做都是試圖從actor的郵箱中提取消息,而後經過模式匹配的方式調用處理函數,可是receive是基於線程模型的,而react是基於消息模型的。分佈式


AKKA平臺是TypeSafe發佈並維護的輕量級Actor框架,相對於SCALA原生定義的Actor,其具備以下的特色:函數

1.更加簡單的併發策略Simpler Concurrency,經過Actors STM & Transactors可以簡化編寫可靠的並行計算性能

2.EDA架構Event-driven Architecture,完美的異步事件驅動架構,不會堵塞

3.真正的可伸縮性,使用異步消息在多核以及多個節點之間擴展

4.容錯性,重視失敗。Let it crash!

5.遠程透明性,底層可使用NETTY或是THRIFT來通信

6.集羣管理能力,Cluster機制是AKKA20後提供的新功能

AKKA系統特別適合在雲端或是基於多刀片系統的分佈式計算,具備很強的Scale out的能力。

====================END====================

相關文章
相關標籤/搜索