Linux之IO模型機(jī)制

同步和異步

同步和異步是用戶線程與內(nèi)核交互的方式,關(guān)注的是消息通知機(jī)制,是如何通知調(diào)用者.

同步: synchronous

調(diào)用發(fā)出之后, 不會(huì)立即返回,一旦返回即是最終結(jié)果

異步:asynchronous

調(diào)用發(fā)出之后, 被調(diào)用方立即返回消息, 但返回的并非最終結(jié)果,被調(diào)用者通過(guò)狀態(tài)通知機(jī)制來(lái)通知調(diào)用者,或通過(guò)回調(diào)函數(shù)來(lái)處理結(jié)果

阻塞和非阻塞

阻塞和非阻塞是用戶線程調(diào)用內(nèi)核IO操作的方式,關(guān)注的是調(diào)用者等待被調(diào)用者返回調(diào)用結(jié)果時(shí)的狀態(tài)(即中間過(guò)程)

阻塞:block

調(diào)用結(jié)果返回之前,調(diào)用者會(huì)被掛起,可能轉(zhuǎn)為不可中斷睡眠,調(diào)用者只有在等到返回結(jié)果之后才會(huì)繼續(xù)處理新的請(qǐng)求.

非阻塞: nonblock

調(diào)用者在結(jié)果返回之前,不會(huì)被掛起,即調(diào)用不會(huì)被阻塞調(diào)用者

=====

I/O模型

阻塞式IO: blocking IO

同步阻塞IO模型是最簡(jiǎn)單的IO模型,用戶線程在內(nèi)核進(jìn)行IO操作時(shí)被阻塞,處理不可中斷睡眠,此過(guò)程中第一階段它要一直處于等待狀態(tài).

非阻塞式IO:nonblocking IO

第一階段它要盲等待(輪循),這種情況下, 會(huì)影響系統(tǒng)的整體性能,大量用戶請(qǐng)求的情況下, 會(huì)降低性能.

復(fù)用型IO: multiplexing IO

也被稱之為多路IO復(fù)用.其有selet(),poll(),select()等函數(shù),select()要求最多不能超過(guò)1024個(gè)調(diào)用,prefork就是基于select的多路利用模型, 其select幫調(diào)用者阻塞,調(diào)用者能接受其它請(qǐng)求,第二階段也會(huì)被阻塞(數(shù)據(jù)從內(nèi)核空間至用戶進(jìn)程空間的過(guò)程). 通常一個(gè)進(jìn)程只能處理一個(gè)IO,但web場(chǎng)景一般都是兩路IO(磁盤和網(wǎng)絡(luò)). 在內(nèi)核中有新的IO調(diào)用,當(dāng)調(diào)用者發(fā)起IO調(diào)用時(shí),內(nèi)核中有一個(gè)代理人(select,poll)幫其阻塞,并將請(qǐng)求轉(zhuǎn)換為內(nèi)核能理解的內(nèi)容.

事件驅(qū)動(dòng)式IO:signal driven IO

調(diào)用者發(fā)起調(diào)用后,被調(diào)用者收到請(qǐng)求后,立即返回收到消息(即在此動(dòng)作中,調(diào)用者向內(nèi)核注冊(cè)了一個(gè)函數(shù)),當(dāng)內(nèi)核處理完成后, 再通知調(diào)用者.第一階段非阻塞,第二階段是阻塞的.event模型也采用了此種IO機(jī)制. nginx也是采用了此種IO機(jī)制(并且還是邊緣觸發(fā),其也支持異步IO機(jī)制). 當(dāng)有IO調(diào)用已經(jīng)在內(nèi)核完成時(shí), 進(jìn)程正忙于處理其它請(qǐng)求,未能處理新到的IO事件,此時(shí)內(nèi)核將完成的事件存放于內(nèi)核某位置,進(jìn)程空閑時(shí)通過(guò)回調(diào)函數(shù)再進(jìn)行讀取.

異步IO

其由內(nèi)核完成兩個(gè)階段后,再通知調(diào)用者,其epoll()函數(shù)就是異步IO機(jī)制.

mmap機(jī)制

直接將磁盤的地址映射到內(nèi)存中,通知進(jìn)程過(guò)來(lái)讀取.

=======

一次完整的READ操作:
  • 第一階段: 等待數(shù)據(jù)準(zhǔn)備好, 從磁盤到內(nèi)存中.
  • 第二階段: 數(shù)據(jù)從內(nèi)核空間至進(jìn)程空間(此階段被理解為真正的IO調(diào)用)

各IO的圖解

img
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末析显,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子哑舒,更是在濱河造成了極大的恐慌酥艳,老刑警劉巖贰军,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件跷跪,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡满力,警方通過(guò)查閱死者的電腦和手機(jī)狰住,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門张吉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人转晰,你說(shuō)我怎么就攤上這事芦拿。” “怎么了查邢?”我有些...
    開封第一講書人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵蔗崎,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我扰藕,道長(zhǎng)缓苛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任邓深,我火速辦了婚禮未桥,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘芥备。我一直安慰自己冬耿,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開白布萌壳。 她就那樣靜靜地躺著亦镶,像睡著了一般日月。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上缤骨,一...
    開封第一講書人閱讀 52,457評(píng)論 1 311
  • 那天爱咬,我揣著相機(jī)與錄音,去河邊找鬼绊起。 笑死精拟,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的虱歪。 我是一名探鬼主播蜂绎,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼笋鄙!你這毒婦竟也來(lái)了荡碾?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤局装,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后劳殖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體铐尚,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年哆姻,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了宣增。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡矛缨,死狀恐怖爹脾,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情箕昭,我是刑警寧澤灵妨,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站落竹,受9級(jí)特大地震影響泌霍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜述召,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一朱转、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧积暖,春花似錦藤为、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)分别。三九已至,卻和暖如春窿吩,著一層夾襖步出監(jiān)牢的瞬間茎杂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工纫雁, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留煌往,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓轧邪,卻偏偏與公主長(zhǎng)得像刽脖,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子忌愚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

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