1. 程式人生 > >Actor模型

Actor模型

span 請求 內容 過程 每次 方法調用 順序 發送消息 mil

  Actor模型在並發編程中是比較常見的一種模型。很多開發語言都提供了原生的Actor模型。例如erlang,scala等。

  Actor,可以看作是一個個獨立的實體,他們之間是毫無關聯的。但是他們可以通過消息來通信。一個Actor收到其他Actor的信息後,它可以根據需要作出各種相應。消息的類型可以是任意的,消息的內容也可以是任意的。這點有點像webservice了。只提供接口服務,你不必了解我是如何實現的。

  一個Actor指的是一個最基本的計算單元。它能接收一個消息並且基於其執行計算。這個理念很像面向對象語言,一個對象接收一條消息(方法調用),然後根據接收的消息做事(調用了哪個方法)。Actors一大重要特征在於actors之間相互隔離,它們並不互相共享內存。這點區別於上述的對象。也就是說,一個actor能維持一個私有的狀態,並且這個狀態不可能被另一個actor所改變。

  一個Actor如何處理多個Actor的請求呢?它先建立一個消息隊列,每次收到消息後,就放入隊列,而它每次也從隊列中取出消息體來處理。通常我們都使得這個過程是循環的。讓Actor可以時刻處理發送來的消息。一個actor只能順序地處理消息。也就是說其它actors發送了三條消息給一個actor,這個actor只能一次處理一條。所以如果你要並行處理3條消息,你需要把這條消息發給3個actors。消息異步地傳送到actor,所以當actor正在處理消息時,新來的消息應該存儲到別的地方。Mailbox就是這些消息存儲的地方。

  光有一個actor是不夠的,多個actors才能組成系統。在actor模型裏每個actor都有地址,所以它們才能夠相互發送消息。

Actor模型