網(wǎng)絡(luò)IO模型

內(nèi)核空間與用戶空間

  • 操作系統(tǒng)內(nèi)核

可以訪問受保護(hù)的內(nèi)存空間誊薄,擁有訪問底層硬件設(shè)備的所有權(quán)限喳挑。

為了保護(hù)內(nèi)核的安全曹动,操作系統(tǒng)將虛擬空間劃分為:

  • 內(nèi)核空間(內(nèi)核代碼運(yùn)行的地方)
  • 用戶空間(用戶程序代碼運(yùn)行的地方)

內(nèi)核空間和用戶空間是隔離的疚俱。用戶程序不能直接操作內(nèi)核甸怕,需要通過系統(tǒng)調(diào)用來與內(nèi)核進(jìn)行通信。

socket的出入

https://blog.csdn.net/fen_liu/article/details/120410870
對于一個socket的出入操作灰伟,通常包括兩個階段:

  • 等待數(shù)據(jù)從網(wǎng)絡(luò)中到達(dá)(數(shù)據(jù)到達(dá)后拆又,被復(fù)制到內(nèi)核的緩沖區(qū))
  • 把數(shù)據(jù)從內(nèi)核緩沖區(qū)復(fù)制到用戶應(yīng)用進(jìn)程緩沖區(qū)

五種IO模型

阻塞式I/O

  • 解釋

當(dāng)應(yīng)用進(jìn)程調(diào)用了recv()這個系統(tǒng)調(diào)用,操作系統(tǒng)就開始了IO的第一個階段栏账,用戶這邊帖族,整個進(jìn)程會被阻塞,當(dāng)內(nèi)核等到數(shù)據(jù)準(zhǔn)備好了挡爵,將數(shù)據(jù)從內(nèi)核拷貝到用戶內(nèi)存竖般,然后內(nèi)核返回結(jié)果,用戶進(jìn)程解除阻塞茶鹃。

  • 特點(diǎn)

在IO的兩個階段都阻塞涣雕;阻塞式不消耗CPU時間。

  • 場景

阻塞 Socket前计、Java BIO胞谭。適用并發(fā)較小的網(wǎng)絡(luò)應(yīng)用垃杖,并發(fā)較大的不適用男杈,因為一個請求 IO 阻塞進(jìn)程,就要為每個請求分配一個進(jìn)程(線程)來響應(yīng)调俘,開銷大伶棒。

非阻塞式I/O

  • 解釋

當(dāng)用戶進(jìn)程發(fā)出 recv() 操作時旺垒,如果內(nèi)核中的數(shù)據(jù)還沒有準(zhǔn)備好,那么它并不會阻塞用戶進(jìn)程肤无,而是立刻返回一個錯誤碼先蒋。一旦內(nèi)核中的數(shù)據(jù)準(zhǔn)備好了,并且又再次收到了用戶進(jìn)程的系統(tǒng)調(diào)用宛渐,那么它馬上就將數(shù)據(jù)拷貝到了用戶內(nèi)存竞漾,然后返回。

  • 特點(diǎn)

在第二階段阻塞窥翩;進(jìn)程輪詢調(diào)用(polling)业岁,消耗 CPU 資源。

  • 場景

SOCKET 設(shè)置 NON BLOCKING 屬性寇蚊。支持并發(fā)量小笔时,不用及時響應(yīng)的網(wǎng)絡(luò)應(yīng)用。

IO多路復(fù)用(事件驅(qū)動)

  • 解釋

當(dāng)用戶進(jìn)程調(diào)用了 select(poll仗岸、epoll)允耿,那么整個進(jìn)程會被阻塞,而此時扒怖,內(nèi)核會監(jiān)視所有 select 負(fù)責(zé)的 socket较锡,當(dāng)任何一個 socket 中的數(shù)據(jù)準(zhǔn)備好了,select 就會返回盗痒。這個時候用戶進(jìn)程再調(diào)用 recv 操作念链,將數(shù)據(jù)從內(nèi)核拷貝到用戶進(jìn)程。

  • 特點(diǎn)

第一階段在select上阻塞积糯,第二階段依舊阻塞掂墓;性能好,Reactor模式看成。

  • 場景

Java NIO君编,Nginx。適用高并發(fā)服務(wù)應(yīng)用開發(fā)川慌,一個進(jìn)程/線程響應(yīng)多個請求吃嘿。

https://mp.weixin.qq.com/s/3gC-nUnFGv-eoSBsEdSZuA
https://cloud.tencent.com/developer/article/1586974

信號驅(qū)動式I/O

  • 解釋

應(yīng)用進(jìn)程使用 sigaction 系統(tǒng)調(diào)用,內(nèi)核立即返回梦重,應(yīng)用進(jìn)程可以繼續(xù)執(zhí)行兑燥,也就是說等待數(shù)據(jù)階段應(yīng)用進(jìn)程是非阻塞的。內(nèi)核在數(shù)據(jù)到達(dá)時向應(yīng)用進(jìn)程發(fā)送 SIGIO 信號琴拧,應(yīng)用進(jìn)程收到之后在信號處理程序中調(diào)用 recv()將數(shù)據(jù)從內(nèi)核復(fù)制到應(yīng)用進(jìn)程中降瞳。

  • 特點(diǎn)

特點(diǎn):第二階段阻塞;通知機(jī)制,不是輪訓(xùn)挣饥;CPU利用高于非阻塞式IO除师。

異步I/O

  • 解釋

應(yīng)用進(jìn)程執(zhí)行 aio_read 系統(tǒng)調(diào)用會立即返回,應(yīng)用進(jìn)程可以繼續(xù)執(zhí)行扔枫,不會被阻塞汛聚,內(nèi)核會在所有操作完成之后向應(yīng)用進(jìn)程發(fā)送信號。

  • 特點(diǎn)

兩個階段都不會阻塞短荐;異步 I/O 的信號是通知應(yīng)用進(jìn)程 I/O 完成倚舀,而信號驅(qū)動 I/O 的信號是通知應(yīng)用進(jìn)程可以開始 I/O。

  • 場景

Java 7 AIO忍宋、高性能服務(wù)器瞄桨,高性能高并發(fā)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末讶踪,一起剝皮案震驚了整個濱河市芯侥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌乳讥,老刑警劉巖柱查,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異云石,居然都是意外死亡唉工,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門汹忠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來淋硝,“玉大人,你說我怎么就攤上這事宽菜∫ド牛” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵铅乡,是天一觀的道長继谚。 經(jīng)常有香客問我,道長阵幸,這世上最難降的妖魔是什么花履? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮挚赊,結(jié)果婚禮上诡壁,老公的妹妹穿的比我還像新娘。我一直安慰自己荠割,他們只是感情好妹卿,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般纽帖。 火紅的嫁衣襯著肌膚如雪宠漩。 梳的紋絲不亂的頭發(fā)上举反,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天懊直,我揣著相機(jī)與錄音,去河邊找鬼火鼻。 笑死室囊,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的魁索。 我是一名探鬼主播融撞,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼粗蔚!你這毒婦竟也來了尝偎?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤鹏控,失蹤者是張志新(化名)和其女友劉穎致扯,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體当辐,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡抖僵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了缘揪。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片耍群。...
    茶點(diǎn)故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖找筝,靈堂內(nèi)的尸體忽然破棺而出蹈垢,到底是詐尸還是另有隱情,我是刑警寧澤袖裕,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布耘婚,位于F島的核電站,受9級特大地震影響陆赋,放射性物質(zhì)發(fā)生泄漏沐祷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一攒岛、第九天 我趴在偏房一處隱蔽的房頂上張望赖临。 院中可真熱鬧,春花似錦灾锯、人聲如沸兢榨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吵聪。三九已至凌那,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間吟逝,已是汗流浹背帽蝶。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留块攒,地道東北人励稳。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像囱井,于是被迫代替她去往敵國和親驹尼。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評論 2 354

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