muduo多線程的處理

這幾天詳細(xì)讀了muduo的網(wǎng)絡(luò)處理部分评甜,發(fā)現(xiàn)多線程處理是整個(gè)框架的精華肘交。muduo是基于one loop per thread模型的氯窍。那么什么是one loop per thread模型呢缔杉?

字面意思上講就是每個(gè)線程里有個(gè)loop,即消息循環(huán)锤躁。我們知道服務(wù)器必定有一個(gè)監(jiān)聽的socket和1到N個(gè)連接的socket,每個(gè)socket也必定有網(wǎng)絡(luò)事件或详。我們可以啟動(dòng)設(shè)定數(shù)量的線程系羞,讓這些線程來承擔(dān)網(wǎng)絡(luò)事件郭计。

每個(gè)進(jìn)程默認(rèn)都會(huì)啟動(dòng)一個(gè)線程,即這個(gè)線程不需要我們手動(dòng)去創(chuàng)建椒振,稱之為主線程昭伸。一般地我們讓主線程來承擔(dān)監(jiān)聽socket的網(wǎng)絡(luò)事件。至于連接socket的事件要不要在主線程中處理澎迎,這個(gè)得看我們啟動(dòng)其他線程即工作線程的數(shù)量庐杨。如果啟動(dòng)了工作線程,那么連接socket的網(wǎng)絡(luò)事件一定是在工作線程中處理的夹供。

每個(gè)線程的事件處理都是在一個(gè)EventLoop的while循環(huán)中灵份,而每一個(gè)EventLoop都有一個(gè)多路事件復(fù)用解析器epoller。循環(huán)的主體部分是等待epoll事件觸發(fā)哮洽,從而處理事件填渠。主線程EventLoop的epoller會(huì)添加監(jiān)聽socket可讀事件,而工作線程只添加了定時(shí)器處理事件(每個(gè)EventLoop都會(huì)有鸟辅,主線程有EventLoop,當(dāng)然也添加了定時(shí)器處理事件)氛什。在沒有事件觸發(fā)之前,epoller都是阻塞的匪凉,導(dǎo)致線程被掛起枪眉。

當(dāng)有連接來到時(shí),掛起的主線程恢復(fù)洒缀,會(huì)執(zhí)行新連接的回調(diào)函數(shù)瑰谜。在該函數(shù)中,會(huì)從線程池中取得一個(gè)線程來接管新連接socket的處理树绩。那么問題來了,既然工作線程已經(jīng)阻塞了隐轩,那他是如何處理新連接socket相關(guān)事件的呢饺饭,也就是什么時(shí)候恢復(fù)呢?

原來职车,每個(gè)EventLoop還有一個(gè)wakeup事件瘫俊。主線程通知工作線程去處理事件的時(shí)候,工作線程發(fā)現(xiàn)不在本線程的時(shí)間片中悴灵,于是喚醒工作線程了扛芽。
有關(guān)代碼,下篇再分析积瞒。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末川尖,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子茫孔,更是在濱河造成了極大的恐慌叮喳,老刑警劉巖被芳,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異馍悟,居然都是意外死亡畔濒,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門锣咒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來侵状,“玉大人,你說我怎么就攤上這事毅整∪ば郑” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵毛嫉,是天一觀的道長(zhǎng)诽俯。 經(jīng)常有香客問我,道長(zhǎng)承粤,這世上最難降的妖魔是什么暴区? 我笑而不...
    開封第一講書人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮辛臊,結(jié)果婚禮上仙粱,老公的妹妹穿的比我還像新娘。我一直安慰自己彻舰,他們只是感情好伐割,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著刃唤,像睡著了一般隔心。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上尚胞,一...
    開封第一講書人閱讀 49,046評(píng)論 1 285
  • 那天硬霍,我揣著相機(jī)與錄音,去河邊找鬼笼裳。 笑死唯卖,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的躬柬。 我是一名探鬼主播拜轨,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼允青!你這毒婦竟也來了橄碾?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎堪嫂,沒想到半個(gè)月后偎箫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡皆串,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年淹办,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片恶复。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡怜森,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出谤牡,到底是詐尸還是另有隱情副硅,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布翅萤,位于F島的核電站恐疲,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏套么。R本人自食惡果不足惜培己,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望胚泌。 院中可真熱鬧省咨,春花似錦、人聲如沸玷室。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)穷缤。三九已至敌蜂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間津肛,已是汗流浹背紊册。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留快耿,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓芳绩,卻偏偏與公主長(zhǎng)得像掀亥,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子妥色,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容