多路IO復(fù)用

之前看《UNIX網(wǎng)絡(luò)編程》時(shí),對(duì)于Linux IO 模式的理解總覺得不夠徹底唯鸭。最近借著看spp源碼的機(jī)會(huì),對(duì)這部分知識(shí)進(jìn)行了相關(guān)梳理订讼。以下討論內(nèi)容的背景是Linux環(huán)境下的網(wǎng)絡(luò)IO迟赃。

網(wǎng)絡(luò)IO:網(wǎng)絡(luò)IO涉及網(wǎng)絡(luò)上數(shù)據(jù)的傳輸混弥,其顯著特點(diǎn)是IO的時(shí)延比較大磕仅。一次網(wǎng)絡(luò)IO過程(read 操作)通晨暮椋可分解為倆個(gè)操作過程搅吁,1威创、等待數(shù)據(jù)準(zhǔn)備就緒(填充內(nèi)核緩存) 2、將數(shù)據(jù)從內(nèi)核拷貝到用戶進(jìn)程空間

阻塞和非阻塞:正在執(zhí)行的進(jìn)程谎懦,由于期待某些事情的發(fā)送肚豺,而無法繼續(xù)工作的時(shí)候,自動(dòng)執(zhí)行系統(tǒng)阻塞原語(yǔ)界拦,使自己處于阻塞狀態(tài)吸申。進(jìn)程進(jìn)入阻塞狀態(tài)是不占用CPU資源。阻塞和非阻塞是針對(duì)當(dāng)數(shù)據(jù)沒有準(zhǔn)備好的時(shí)候【步驟1】,進(jìn)程采取的策略截碴。

同步和異步:同步是指進(jìn)程進(jìn)行IO 操作的時(shí)候會(huì)阻塞(這里的阻塞特指當(dāng)數(shù)據(jù)準(zhǔn)備好的情況下梳侨,進(jìn)程一定會(huì)等數(shù)據(jù)拷貝完成后再進(jìn)行后續(xù)執(zhí)行流。這里的IO操作特指將數(shù)據(jù)從內(nèi)核拷貝到用戶進(jìn)程)隐岛;異步是指當(dāng)進(jìn)程發(fā)起IO操作后猫妙,就直接返回了,直到kernel發(fā)送信號(hào)告訴進(jìn)程IO完成了聚凹,這種模式割坠,進(jìn)程在整個(gè)過程中完全沒有被阻塞。同步和異步是針對(duì)當(dāng)數(shù)據(jù)從內(nèi)核拷貝的用戶空間這段時(shí)間內(nèi)【步驟2】妒牙,進(jìn)程采取的策略彼哼。

正因?yàn)榫W(wǎng)絡(luò)IO操作需要經(jīng)歷兩個(gè)階段,linux系統(tǒng)區(qū)分了下面五種網(wǎng)絡(luò)模型湘今。

阻塞IO

阻塞IO的操作流程如下圖:

阻塞模式的特點(diǎn)是:直到數(shù)據(jù)準(zhǔn)備好敢朱,阻塞步驟1; 直到數(shù)據(jù)拷貝完成摩瞎,阻塞步驟2拴签;

非阻塞IO

非阻塞IO的操作流程如下圖:

非阻塞模式的特點(diǎn)是:如果數(shù)據(jù)沒有準(zhǔn)備好則返回,不阻塞步驟1旗们; 直到數(shù)據(jù)拷貝完成蚓哩,阻塞步驟2;(由于不阻塞步驟1上渴,因此需要用戶進(jìn)程不斷主動(dòng)詢問kernel數(shù)據(jù)是否準(zhǔn)備好了)

IO多路復(fù)用

IO多路復(fù)用的操作流程如下圖:

IO多路復(fù)用的特點(diǎn)是:直到數(shù)據(jù)準(zhǔn)備好(多路中岸梨,只要有一路準(zhǔn)備好就算是有數(shù)據(jù)),阻塞步驟1稠氮;直到數(shù)據(jù)拷貝完成曹阔,阻塞步驟2;和阻塞IO不同地地方在于:1隔披、IO多路復(fù)用步驟1在代理系統(tǒng)調(diào)用處阻塞(select赃份,epoll等)而不是read系統(tǒng)調(diào)用處阻塞 2、IO多路復(fù)用同時(shí)監(jiān)控多路奢米,只要有一路數(shù)據(jù)準(zhǔn)備完畢抓韩,其代理系統(tǒng)調(diào)用就返回。

信號(hào)驅(qū)動(dòng)IO

信號(hào)驅(qū)動(dòng)IO的操作流程如下:

信號(hào)驅(qū)動(dòng)IO的主要特點(diǎn)是: 預(yù)先告知內(nèi)核當(dāng)某個(gè)socket有數(shù)據(jù)的時(shí)候通知進(jìn)程恃慧,不阻塞步驟1;用戶進(jìn)程讀取數(shù)據(jù)园蝠,阻塞步驟2.

異步IO

異步IO的操作流程如下:

異步操作的特點(diǎn)是: 調(diào)用后馬上返回,不阻塞步驟1痢士,不阻塞步驟2; 內(nèi)核完成步驟1和步驟2后給用戶進(jìn)程發(fā)送signal彪薛,告訴用戶進(jìn)程read操作完成了茂装。

所以,阻塞善延、非阻塞少态、IO多路復(fù)用模式、信號(hào)驅(qū)動(dòng)IO都是同步模式易遣; 只有異步IO模式是異步彼妻。判斷阻塞、非阻塞看步驟1是否會(huì)被阻塞豆茫;判斷同步和異步侨歉,看步驟2是否會(huì)被阻塞。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末揩魂,一起剝皮案震驚了整個(gè)濱河市幽邓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌火脉,老刑警劉巖牵舵,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異倦挂,居然都是意外死亡畸颅,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門方援,熙熙樓的掌柜王于貴愁眉苦臉地迎上來没炒,“玉大人,你說我怎么就攤上這事肯骇】耍” “怎么了祖很?”我有些...
    開封第一講書人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵笛丙,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我假颇,道長(zhǎng)胚鸯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任笨鸡,我火速辦了婚禮姜钳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘形耗。我一直安慰自己哥桥,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開白布激涤。 她就那樣靜靜地躺著拟糕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上送滞,一...
    開封第一講書人閱讀 51,590評(píng)論 1 305
  • 那天侠草,我揣著相機(jī)與錄音,去河邊找鬼犁嗅。 笑死边涕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的褂微。 我是一名探鬼主播功蜓,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼宠蚂!你這毒婦竟也來了霞赫?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤肥矢,失蹤者是張志新(化名)和其女友劉穎端衰,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體甘改,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡旅东,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了十艾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片抵代。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖忘嫉,靈堂內(nèi)的尸體忽然破棺而出荤牍,到底是詐尸還是另有隱情,我是刑警寧澤庆冕,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布康吵,位于F島的核電站,受9級(jí)特大地震影響访递,放射性物質(zhì)發(fā)生泄漏晦嵌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一拷姿、第九天 我趴在偏房一處隱蔽的房頂上張望惭载。 院中可真熱鬧,春花似錦响巢、人聲如沸描滔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)含长。三九已至靶衍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間茎芋,已是汗流浹背颅眶。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留田弥,地道東北人涛酗。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像偷厦,于是被迫代替她去往敵國(guó)和親商叹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

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