Akka学习笔记:Actors介绍
任何在過去做過多線程開發(fā)的人都不會否認(rèn)維護(hù)多線程應(yīng)用程序是多么難和頭疼的一件事!我這里說的是維護(hù),因為多線程開發(fā)開始的時候很簡單,當(dāng)你看到性能的提升對你來說是件多么高興的一件事。然而,當(dāng)你看到在子任務(wù)中很難找到容易的方法來從錯誤中恢復(fù);或者是存在僵尸進(jìn)程的bug很難重現(xiàn);或者你的監(jiān)控程序顯示你的線程浪費(fèi)大量的時間來等待共享狀態(tài)而阻塞的時候?qū)δ銇碚f是多么頭疼!
我在這里并沒有提到Java的并發(fā)API和它的集合使得多線程的編程變得相當(dāng)簡單輕松,因為我相信你既然來到這里,這就說明你希望能更好地控制你的子任務(wù),或者你就是不喜歡使用鎖以及同步塊,希望能有一種更高層次的抽象。
在本系列的Akka筆記中,將會通過簡單的Akka例子來探討Akka的多種特性。
什么是ACTORS
Akka Actors遵循Actor模型
我們這把Actors當(dāng)作是一個人,這個人不會自己和其他的人直接說話,他們只通過mail來進(jìn)行交流。
現(xiàn)在來探討Actors的一些特性:
一、消息傳遞
假設(shè)有兩個人:學(xué)生和聰明的老師。學(xué)生每天早上都會給老師發(fā)送郵件,而聰明的老師都會回復(fù)一句名言。這里需要解釋:
1、學(xué)生發(fā)送郵件。一旦發(fā)送成功,郵件不能再修改。這天然就具備了不可變性;
2、老師會自己決定何時檢查郵箱;
3、老師還會回復(fù)一封郵件(也是不可變的);
4、學(xué)生會自己決定何時檢查郵箱;
5、學(xué)生不會一直等待回信(非阻塞的)
這就可以總結(jié)出Actor模型的一個基本特征——消息傳遞
二、并發(fā)
現(xiàn)在,假設(shè)有三個聰明的老師和三個學(xué)生。每個學(xué)生都會給每個老師發(fā)送郵件。這會發(fā)生什么事?其實什么都沒改變!每個人都有他自己的郵箱。這里需要注意的一點:默認(rèn)情況下,郵箱里面的郵件是按照他們先后達(dá)到的次序進(jìn)行閱讀和處理的。
本質(zhì)上,這很像是ConcurrentLinkedQueue。沒有人去等待郵件被閱讀,簡單來說這就是一個非阻塞的消息(在Akka中內(nèi)置了許多的mailboxes,這里http://doc.akka.io/docs/akka/snapshot/scala/mailboxes.html,包括了有界和基于優(yōu)先級的。其實,我們自己也可以去實現(xiàn))。
三、錯誤恢復(fù)
假如這三個老師分別來自不同的院系:歷史系、地理系和哲學(xué)系。
歷史系的老師用過去的某個事件筆記進(jìn)行回復(fù);而地理系的老師回復(fù)了一個有趣的地點;哲學(xué)系的老師回復(fù)了一個引用。每個學(xué)生分別給每個老師發(fā)送消息并分別得到回復(fù)。學(xué)生并不關(guān)心郵件到底是系里的哪個老師回復(fù)的。如果有一天有個老師生病了呢?系里至少得有一個老師在處理郵件才行。這樣的話,系里的另一位老師就會頂上這項工作。
這里需要注意的地方:
1、會有一個Actor池,每個Actor會處理不同的事件。
2、Actor做的事情可能會拋出異常,而它自己無法從中恢復(fù)。在這種情況下,需要再生成(created )一個新的Actor來頂替它。換句話說,這個新的Actor會忽略剛才那條消息,繼續(xù)處理剩余的消息。這些也被稱為指令(Directive),后面我們會再講到它們。
四、多任務(wù)
假設(shè)學(xué)生需要考試成績,每個老師是通過郵件來發(fā)送的。也就是說,Actor可以處理多種類型的消息。
五、消息鏈
假如學(xué)生只想收到一封郵件而不是三件呢?
我們也可用用Actor來實現(xiàn)!我們可以通過分層來把老師連在一起。這個我們將在后面講到Supervisor和Future的時候再回來講。
應(yīng)Mohan的要求,我們把類比的實體和Actor模型中的組件做一下映射。
學(xué)生和老師變成我們的Actor,Email Inbox對應(yīng)Mailbox 組件。請求和響應(yīng)不可修改、它們是不可變對象。最后,Actor中的MessageDispatcher組件將管理mailbox,并且將消息路由到對應(yīng)的Mailbox中。
Akka學(xué)習(xí)筆記系列文章:
《Akka學(xué)習(xí)筆記:ACTORS介紹》
《Akka學(xué)習(xí)筆記:Actor消息傳遞(1)》
《Akka學(xué)習(xí)筆記:Actor消息傳遞(2)》
《Akka學(xué)習(xí)筆記:日志》
《Akka學(xué)習(xí)筆記:測試Actors》
《Akka學(xué)習(xí)筆記:Actor消息處理-請求和響應(yīng)(1) 》
《Akka學(xué)習(xí)筆記:Actor消息處理-請求和響應(yīng)(2) 》
《Akka學(xué)習(xí)筆記:ActorSystem(配置)》
《Akka學(xué)習(xí)筆記:ActorSystem(調(diào)度)》
總結(jié)
以上是生活随笔為你收集整理的Akka学习笔记:Actors介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【小型系统】简单的刷票系统(突破IP限制
- 下一篇: 百度搜索正式升级冰桶算法5.0!