Actor模型簡介

1 背景

  • 傳統(tǒng)編程模型認(rèn)為寫一個變量就是直接寫了相應(yīng)的內(nèi)存地址,但是在現(xiàn)代計(jì)算機(jī)架構(gòu)中CPU寫的是cache lines而不是直接寫內(nèi)存,這些緩存大部分是L1一級緩存,也就是說CPU的一個核寫的內(nèi)容另外的核看不見,為了把變化廣播給別的核(這樣才能同樣廣播到別的線程),需要把cache line的變化同步到其他核的cache。

  • JVM運(yùn)行環(huán)境下,要做到上述的線程間共享,需要顯式地給變量打上volatile 標(biāo)記或者使用Atomic原子包裝數(shù)據(jù)結(jié)構(gòu)或者使用鎖哥艇。否則,一般變量值的變化不保證能實(shí)時同步給其它線程可見胜嗓。為什么不標(biāo)記所有變量都是volatile的呢?因?yàn)樵贑PU的多個核之間同步cache lines是很昂貴的操作亡笑!會拖慢CPU內(nèi)核速度并且導(dǎo)致cache coherence protocol (the protocol CPUs use to transfer cache lines between main memory and other CPUs) 瓶頸,最終明顯的拖慢運(yùn)行泼返。

2 Actor簡介

Actor模型首先是由Carl Hewitt在1973定義秫舌, 由Erlang OTP 推廣瑰步,其消息傳遞更加符合面向?qū)ο蟮脑家鈭D矢洲。Actor屬于并發(fā)組件模型,通過組件方式定義并發(fā)編程范式的高級階段缩焦,避免使用者直接接觸多線程并發(fā)或線程池等基礎(chǔ)概念读虏。簡單理解為 Actor模型=狀態(tài)+行為+消息

Actor.png

2.1 面向?qū)ο?/h3>

Actor 模型本質(zhì)上是一種計(jì)算模型袁滥,基本的計(jì)算單元稱之為Actor 盖桥,換言之,在Actor 模型中题翻,所有的計(jì)算都是在Actor 中執(zhí)行的揩徊。在面向?qū)ο缶幊汤锩妫磺卸际菍ο竺晡眨贏ctor模型里面靴拱,一切都是Actor ,并且Actor 之間完全隔離的猾普,不會共享任何變量。

2.2 無鎖

在并發(fā)編程中常需要關(guān)注鎖和內(nèi)存原子性等一系列線程問題本谜,而Actor模型內(nèi)部的狀態(tài)由它自己維護(hù)即它內(nèi)部數(shù)據(jù)只能由它自己修改(通過消息傳遞來進(jìn)行狀態(tài)修改)初家,所以使用Actors模型進(jìn)行并發(fā)編程可以很好地避免這些問題。Actor內(nèi)部是以單線程的模式來執(zhí)行的乌助,類似于redis溜在,所以Actor完全可以實(shí)現(xiàn)分布式鎖類似的應(yīng)用。

2.3 異步

Actor中的異步是通過各自的MailBox來實(shí)現(xiàn)的他托,Actor間進(jìn)行邏輯交互時只需要把消息傳遞到對應(yīng)的MailBox里掖肋。

2.4 容錯

對于傳統(tǒng)的編程方式都是在將來可能出現(xiàn)異常的地方去捕獲異常來保證系統(tǒng)的穩(wěn)定性,即防御式編程赏参。但對于防御式編程志笼,防御的一方永遠(yuǎn)不能100%的防御住所有將來可能出現(xiàn)代碼缺陷的地方沿盅。比如在java代碼中很多地方充斥著判斷變量是否為null,這些就屬于防御式編碼最典型的案例纫溃。但是Actor模型的程序并不進(jìn)行防御式編程腰涧,而是遵循“任其崩潰”的哲學(xué),讓Actor的管理者們來處理這些崩潰問題紊浩。比如一個Actor崩潰之后窖铡,supervisor可以選擇創(chuàng)建新的實(shí)例或者記錄日志。每個Actor的崩潰或者異常信息都可以反饋到supervisor那里坊谁,這就保證了Actor系統(tǒng)在管理每個Actor實(shí)例的靈活性费彼。

3 MailBox

每個actor都有且僅有一個mailbox,mailbox相當(dāng)于一個小型的隊(duì)列口芍,一旦sender發(fā)送消息敌买,就將該消息入隊(duì)到mailbox中。入隊(duì)的順序按照消息發(fā)送的時間順序阶界。這樣的設(shè)計(jì)解耦了actor之間的關(guān)系虹钮,每個actor都處理各自的mailbox?。雖然所有actor可以同時運(yùn)行膘融,但它們處理mailbox消息時只能當(dāng)前消息處理完畢后才會處理下一個消息芙粱。

當(dāng)一個actor接收到消息后,它能做如下三件事中的任意一件:

  • 創(chuàng)建有限數(shù)量的新actors
  • 發(fā)送有限數(shù)量的消息給其他參與者
  • 指定下一條消息到來時的行為

劣勢:
1氧映、Actor模型需要一個緩沖隊(duì)列來緩沖消息春畔。
2、由于Actor是在進(jìn)程內(nèi)保存自己狀態(tài)的岛都,因此無法統(tǒng)一控制Actor的生命周期律姨。在內(nèi)存使用過量時不能像無狀態(tài)服務(wù)通過淘汰機(jī)制進(jìn)行內(nèi)存控制。
3臼疫、Actor 系統(tǒng)需要關(guān)注mailBox的設(shè)計(jì)择份。

使用場景:
1、有資源競爭的功能都可以使用Actor模型烫堤。
2荣赶、需要做到水平擴(kuò)容的服務(wù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鸽斟,一起剝皮案震驚了整個濱河市拔创,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌富蓄,老刑警劉巖剩燥,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異立倍,居然都是意外死亡灭红,警方通過查閱死者的電腦和手機(jī)侣滩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來比伏,“玉大人胜卤,你說我怎么就攤上這事×尴睿” “怎么了葛躏?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長悠菜。 經(jīng)常有香客問我舰攒,道長,這世上最難降的妖魔是什么悔醋? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任摩窃,我火速辦了婚禮,結(jié)果婚禮上芬骄,老公的妹妹穿的比我還像新娘猾愿。我一直安慰自己,他們只是感情好账阻,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布蒂秘。 她就那樣靜靜地躺著,像睡著了一般淘太。 火紅的嫁衣襯著肌膚如雪姻僧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天蒲牧,我揣著相機(jī)與錄音撇贺,去河邊找鬼。 笑死冰抢,一個胖子當(dāng)著我的面吹牛松嘶,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播晒屎,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼喘蟆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了鼓鲁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤港谊,失蹤者是張志新(化名)和其女友劉穎骇吭,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體歧寺,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡燥狰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年棘脐,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片龙致。...
    茶點(diǎn)故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡蛀缝,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出目代,到底是詐尸還是另有隱情屈梁,我是刑警寧澤,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布榛了,位于F島的核電站在讶,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏霜大。R本人自食惡果不足惜构哺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望战坤。 院中可真熱鬧曙强,春花似錦、人聲如沸途茫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽慈省。三九已至臀防,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間边败,已是汗流浹背袱衷。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留笑窜,地道東北人致燥。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像排截,于是被迫代替她去往敵國和親嫌蚤。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評論 2 348