什麼是ACTOR?
把Actor當做是人,他們之間並不直接跟彼此交流,而是通過郵件進行,下面詳細說一下
1. 消息傳遞
- 學生髮送郵件,一旦發送,郵件就不能再編輯了。這叫自然不變性
- 老師在想查看郵件時採取檢查信箱
- 老師會向學生回覆一封(也是不可變的)
- 學生也會在需要的時候去查看郵箱
- 學生不會一直等待老師的回信(非阻塞)
這基本概括了Actor模型裏消息傳遞的基本邏輯
2. 併發
3. 容錯
想象一下這三個老師來自不同的部門:歷史,地理和哲學。
歷史老師回覆關於歷史的郵件,地理老師回覆關於地理的郵件等等。每個學生髮送給每個老師的消息都會得到回覆。學生不關心是哪個部門的老師回覆的消息。一旦有一天,一個老師生病了,在這個部門中至少應該有一個老師負責處理郵件。這種情況下,部門中的另一個老師進來,回復學生的郵件。
需要注意的點:
-
這裏邊可能有很多Actor,並且他們做的都是不同的事
-
Actor執行過程中可能引起異常,但是並不能自我恢復。這種情況下,新的Actor會被創建出來去替換掉老的Actor。另外,Actor還可以僅僅忽略一個特殊的消息,進而去處理剩下的消息,這叫做Directives,後邊會詳細討論。
4. 多任務
5. 鏈接
如果學生只想獲取一個統一的消息而不是三個呢。
我們也是可以通過Actor來實現類似的需求。我們可以把老師鏈接起來形成層級結構。後邊我們談及Supervisor的時候回重新細談這部分內容。
Actor Model:
這裏學生和老師就是我們的Actor。收件箱裏的郵件就是Mailbox組件。請求和回覆都是不可修改的,他們都是immutable對象。最後,Actor中的MessageDispatcher組件來管理mailbox和路由消息到對應的mailbox。
好了,看些代碼吧