日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Akka学习笔记:Actors介绍

發(fā)布時間:2023/12/18 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Akka学习笔记:Actors介绍 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

任何在過去做過多線程開發(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。