Actor模型

什么是Actor模型闪朱?

Actor 模式是一個解決分布式計算的數(shù)學模型薛匪,其中 Actor 是基礎(chǔ)捐川,它能回應接收到消息,能夠自我決策逸尖,創(chuàng)建更多的 Actor古沥,發(fā)送更多的消息瘸右,決定如何回應下一個接收到的消息。Actor 認為一切皆是 Actor岩齿,類似于面向?qū)ο笳J為一切皆 Object 一樣太颤。OO 的執(zhí)行是順序的,Actor 模型內(nèi)在設(shè)計就是并行的盹沈。

Actor 是異步的

Actor 是計算實體龄章,它回復接收到的消息,能夠并行的:

  • 發(fā)生有限的消息給其他 Actor
  • 創(chuàng)建有限數(shù)目的新 Actor
  • 指定一個消息到達時的行為

這些操作并沒有順序要求襟诸,它們能夠并行地實施瓦堵。由于沒有對消息的時序做規(guī)定,Actor 模式是一種異步模型歌亲,發(fā)送到 Actor 不等待消息被接收而繼續(xù)執(zhí)行菇用。Actor 之間不共享狀態(tài),如果想獲取其他 Actor 的狀態(tài)陷揪,只能通過消息請求的方式惋鸥。
Actor 在消息內(nèi)部指定接收消息的 Actor 地址。Actor 可以用自己的地址發(fā)送消息悍缠,相當于自己接收到自己發(fā)送的消息卦绣,可以驅(qū)動自己的狀態(tài)。

所謂真正的 Actor 模型

Actor 可以被認為是在用戶空間實現(xiàn)的并發(fā)實體飞蚓,所以它應該是應用級別的線程滤港。如果認同這個觀點那么 Actor 要滿足的要求 = 操作系統(tǒng)對進程/線程 提出的要求一樣。

內(nèi)存結(jié)構(gòu)

每個并發(fā)實體都是要有一個固定的數(shù)據(jù)結(jié)構(gòu)趴拧,必須有一個容器可以保存當前所有的并發(fā)實體溅漾。這一點基本上很容易滿足,Akka 中 Actor 就是一個類著榴,所以它的結(jié)構(gòu)就是這個類的數(shù)據(jù)結(jié)構(gòu)添履,大小也就是這個類的大小。Akka 中的 Dispatcher 保存有所有 Actor 的列表脑又。

并發(fā)原語

操作系統(tǒng)的是通過臨界區(qū)暮胧,鎖來定義多線程共享數(shù)據(jù)模型的。在 Actor 中是通過消息來共享數(shù)據(jù)的问麸⊥裕基于消息傳遞要求“數(shù)據(jù)只讀”,你發(fā)送出去的數(shù)據(jù)再修改肯定就不對了严卖。但是這一點在 Java 里面無論如何都是做不到的炼绘,你不修改變量的引用但是還可以修改變量里面的值,調(diào)用對象的方法妄田。

調(diào)度

這是最重要的:沒有調(diào)度俺亮,并發(fā)實體根本不能稱之為并發(fā)實體驮捍。操作系統(tǒng)中 CPU 是由內(nèi)核管理的,調(diào)度算法是基于時間片來調(diào)任務(wù)的脚曾,內(nèi)核隨時可以剝奪一個任務(wù)的 CPU 使用權(quán)這就是“搶占”东且。這一點非常重要,沒有這個功能就意味著調(diào)度是不公平的本讥。一個任務(wù)耗費大量 CPU 會把另個一任務(wù)給餓死珊泳。但是在用戶空間(應用層)很難實現(xiàn)這一點,畢竟 CPU 是不受應用程序的控制的拷沸,沒有把辦法剝奪色查。搶占看似可有可無,但是沒有它就沒有“公平調(diào)度”撞芍,也就談不上并發(fā)秧了。(有任務(wù)撐死,有任務(wù)餓死)

所謂“公平調(diào)度”

比如寫兩個 Actor序无,使用無限循環(huán)輸出字符串(while(true))會瘋狂的吃 CPU验毡,如果是可搶占的公平調(diào)度,則 actor1 和 actor2 應該是比較有規(guī)律的交替(大家得到的 CPU 時間差不多)

Java 中的 Akka
test1
test1
test1
...
test2
test2
test2
...
test1
...
ErLang
test1
test2
test1
test2
test1
test2
test1
test2
...

ErLang 非常均勻的任務(wù)切換帝嗡,實現(xiàn)了“可搶占的公平”晶通。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市哟玷,隨后出現(xiàn)的幾起案子狮辽,更是在濱河造成了極大的恐慌,老刑警劉巖巢寡,帶你破解...
    沈念sama閱讀 222,378評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件喉脖,死亡現(xiàn)場離奇詭異,居然都是意外死亡讼渊,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評論 3 399
  • 文/潘曉璐 我一進店門尊剔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來爪幻,“玉大人,你說我怎么就攤上這事须误“じ澹” “怎么了?”我有些...
    開封第一講書人閱讀 168,983評論 0 362
  • 文/不壞的土叔 我叫張陵京痢,是天一觀的道長奶甘。 經(jīng)常有香客問我,道長祭椰,這世上最難降的妖魔是什么臭家? 我笑而不...
    開封第一講書人閱讀 59,938評論 1 299
  • 正文 為了忘掉前任疲陕,我火速辦了婚禮,結(jié)果婚禮上钉赁,老公的妹妹穿的比我還像新娘蹄殃。我一直安慰自己,他們只是感情好你踩,可當我...
    茶點故事閱讀 68,955評論 6 398
  • 文/花漫 我一把揭開白布诅岩。 她就那樣靜靜地躺著,像睡著了一般带膜。 火紅的嫁衣襯著肌膚如雪吩谦。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,549評論 1 312
  • 那天膝藕,我揣著相機與錄音式廷,去河邊找鬼。 笑死束莫,一個胖子當著我的面吹牛懒棉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播览绿,決...
    沈念sama閱讀 41,063評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼策严,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了饿敲?” 一聲冷哼從身側(cè)響起妻导,我...
    開封第一講書人閱讀 39,991評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎怀各,沒想到半個月后倔韭,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,522評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡瓢对,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,604評論 3 342
  • 正文 我和宋清朗相戀三年寿酌,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片硕蛹。...
    茶點故事閱讀 40,742評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡醇疼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出法焰,到底是詐尸還是另有隱情秧荆,我是刑警寧澤,帶...
    沈念sama閱讀 36,413評論 5 351
  • 正文 年R本政府宣布埃仪,位于F島的核電站乙濒,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏卵蛉。R本人自食惡果不足惜颁股,卻給世界環(huán)境...
    茶點故事閱讀 42,094評論 3 335
  • 文/蒙蒙 一么库、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧豌蟋,春花似錦廊散、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至幌氮,卻和暖如春缭受,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背该互。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評論 1 274
  • 我被黑心中介騙來泰國打工米者, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人宇智。 一個月前我還...
    沈念sama閱讀 49,159評論 3 378
  • 正文 我出身青樓蔓搞,卻偏偏與公主長得像,于是被迫代替她去往敵國和親随橘。 傳聞我的和親對象是個殘疾皇子喂分,可洞房花燭夜當晚...
    茶點故事閱讀 45,747評論 2 361