1. 程式人生 > >關於actor模型的優缺點分析(1)

關於actor模型的優缺點分析(1)

actor model是1973年就提出的一個分散式併發程式設計模型,在erlang語言中得到廣泛支援和應用。目前java中也出現了很多支援actor模型的庫:akka、killim、jetlang等等,其中akka是使用scala寫的,有scala和java兩套使用介面;killim需要對編譯出來的class檔案進行後處理。

最近專案需要架構整改,以支撐後續的發展,正在考慮是否採用actor模型。

actor模型有什麼優點和缺點?

actor模型和ACE reactor(反應堆)有什麼異同?

actor模型和proactor模型有什麼異同?

actor模型對大型分散式併發開發有什麼好處?

tumblr說其底層的RPC框架finagle最初是基於actor模型的,後來為什麼不用了?

先收集點資料,這兩天好好分析一下。

actor是一個計算實體,當其收到訊息時,可以併發執行如下操作:

1. 傳送有限數量的訊息給其他actor

2. 建立有限數量的新actor

3. 指定收到下一訊息時的行為

ACE reactor是通過註冊/回撥方式進行驅動的程式開發模式,先註冊自己關注什麼事件,然後反應堆就會在該事件發生時回撥你。這實際上與actor 模型有些類似。reactor在維基百科定義如下(http://en.wikipedia.org/wiki/Reactor_pattern

):

reactor是一種設計模式,用於一到多個輸入併發向一個服務處理器傳送請求時進行事件處理。服務處理器將收到的請求同步分發到相應的請求處理器上。

按照定義,所有reactor系統都是單執行緒的,但可以應用到多執行緒環境中。reactor模型的特點是控制流反轉(inversed flow of control)

proactor模型可以認為是reactor模型的一種非同步實現,reactor要求收到請求後同步分發的請求處理器上,而proactor允許非同步處理,定義(http://en.wikipedia.org/wiki/Proactor_pattern):

proactor也是事件處理的設計模式,在這種模式中,長時間執行的活動在單獨的非同步過程中處理,非同步處理過程技術後,一個completion handler被呼叫。這個有些類似akka actor模型中,future物件的onComplete、onSuccess、onFailed方法。