io模型

https://blog.csdn.net/ZWE7616175/article/details/80591587

在網(wǎng)絡環(huán)境下,通俗的講灌旧,將IO分為兩步:

1.等绑咱;

2.數(shù)據(jù)搬遷。

如果要想提高IO效率枢泰,需要將等的時間降低描融。

五種IO模型包括:阻塞IO、非阻塞IO衡蚂、信號驅動IO窿克、IO多路轉接、異步IO讳窟。其中让歼,前四個被稱為同步IO。

在介紹五種IO模型時丽啡,我會舉生活中釣魚的例子谋右,加深理解。

1.阻塞IO(blocking I/O)

A拿著一支魚竿在河邊釣魚补箍,并且一直在魚竿前等改执,在等的時候不做其他的事情,十分專心坑雅。只有魚上鉤的時辈挂,才結束掉等的動作,把魚釣上來裹粤。

在內(nèi)核將數(shù)據(jù)準備好之前终蒂,系統(tǒng)調(diào)用會一直等待所有的套接字,默認的是阻塞方式遥诉。


其實拇泣,我們例子中所說的魚竿就是這一個文件描述符。這個模型是我們最常見的矮锈,程序調(diào)用和我們編寫的基本程序是一致的霉翔。

fd=connect();

write(fd);

read(fd);

close(fd);

程序的read必須在write之后執(zhí)行,當write阻塞住了苞笨,read就不能執(zhí)行下去债朵,一直處于等待狀態(tài)。

2.非阻塞IO(noblocking I/O)

B也在河邊釣魚瀑凝,但是B不想將自己的所有時間都花費在釣魚上序芦,在等魚上鉤這個時間段中,B也在做其他的事情(一會看看書粤咪,一會讀讀報紙芝加,一會又去看其他人的釣魚等),但B在做這些事情的時候,每隔一個固定的時間檢查魚是否上鉤藏杖。一旦檢查到有魚上鉤,就停下手中的事情脉顿,把魚釣上來蝌麸。


其實,B在檢查魚竿是否有魚艾疟,是一個輪詢的過程来吩。

每次客戶詢問內(nèi)核是否有數(shù)據(jù)準備好,即文件描述符緩沖區(qū)是否就緒蔽莱。當有數(shù)據(jù)報準備好時弟疆,就進行拷貝數(shù)據(jù)報的操作。當沒有數(shù)據(jù)報準備好時盗冷,也不阻塞程序怠苔,內(nèi)核直接返回未準備就緒的信號,等待用戶程序的下一個輪尋仪糖。

但是柑司,輪尋對于CPU來說是較大的浪費,一般只有在特定的場景下才使用锅劝。

3.信號驅動IO(signal blocking I/O)

C也在河邊釣魚攒驰,但與A、B不同的是故爵,C比較聰明玻粪,他給魚竿上掛一個鈴鐺,當有魚上鉤的時候诬垂,這個鈴鐺就會被碰響劲室,C就會將魚釣上來。

信號驅動IO模型剥纷,應用進程告訴內(nèi)核:當數(shù)據(jù)報準備好的時候痹籍,給我發(fā)送一個信號,對SIGIO信號進行捕捉晦鞋,并且調(diào)用我的信號處理函數(shù)來獲取數(shù)據(jù)報蹲缠。

4.IO多路轉接(I/O multiplexing)

D同樣也在河邊釣魚,但是D生活水平比較好悠垛,D拿了很多的魚竿线定,一次性有很多魚竿在等,D不斷的查看每個魚竿是否有魚上鉤确买。增加了效率斤讥,減少了等待的時間。


IO多路轉接是多了一個select函數(shù),select函數(shù)有一個參數(shù)是文件描述符集合芭商,對這些文件描述符進行循環(huán)監(jiān)聽派草,當某個文件描述符就緒時,就對這個文件描述符進行處理铛楣。

其中近迁,select只負責等,recvfrom只負責拷貝簸州。

IO多路轉接是屬于阻塞IO鉴竭,但可以對多個文件描述符進行阻塞監(jiān)聽,所以效率較阻塞IO的高岸浑。

5.異步IO(asynchronous I/O)

E也想釣魚搏存,但E有事情,于是他雇來了F矢洲,讓F幫他等待魚上鉤璧眠,一旦有魚上鉤,F(xiàn)就打電話給E兵钮,E就會將魚釣上去蛆橡。

當應用程序調(diào)用aio_read時,內(nèi)核一方面去取數(shù)據(jù)報內(nèi)容返回掘譬,另一方面將程序控制權還給應用進程泰演,應用進程繼續(xù)處理其他事情,是一種非阻塞的狀態(tài)葱轩。

當內(nèi)核中有數(shù)據(jù)報就緒時睦焕,由內(nèi)核將數(shù)據(jù)報拷貝到應用程序中,返回aio_read中定義好的函數(shù)處理程序靴拱。

很少有Linux系統(tǒng)支持垃喊,Windows的IOCP就是該模型。

可以看出袜炕,阻塞程度:阻塞IO>非阻塞IO>多路轉接IO>信號驅動IO>異步IO本谜,效率是由低到高的。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末偎窘,一起剝皮案震驚了整個濱河市乌助,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌陌知,老刑警劉巖他托,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異仆葡,居然都是意外死亡赏参,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來把篓,“玉大人纫溃,你說我怎么就攤上這事∪脱冢” “怎么了皇耗?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長揍很。 經(jīng)常有香客問我,道長万伤,這世上最難降的妖魔是什么窒悔? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮敌买,結果婚禮上简珠,老公的妹妹穿的比我還像新娘。我一直安慰自己虹钮,他們只是感情好聋庵,可當我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著芙粱,像睡著了一般祭玉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上春畔,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天脱货,我揣著相機與錄音,去河邊找鬼律姨。 笑死振峻,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的择份。 我是一名探鬼主播扣孟,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼荣赶!你這毒婦竟也來了凤价?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤讯壶,失蹤者是張志新(化名)和其女友劉穎料仗,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體伏蚊,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡立轧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片氛改。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡帐萎,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出胜卤,到底是詐尸還是另有隱情疆导,我是刑警寧澤,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布葛躏,位于F島的核電站澈段,受9級特大地震影響,放射性物質發(fā)生泄漏舰攒。R本人自食惡果不足惜败富,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望摩窃。 院中可真熱鬧兽叮,春花似錦、人聲如沸猾愿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蒂秘。三九已至泽本,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間材彪,已是汗流浹背观挎。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留段化,地道東北人嘁捷。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像显熏,于是被迫代替她去往敵國和親雄嚣。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,507評論 2 359

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

  • 周日午后喘蟆,剛剛放下手里的電話缓升,正在給剛剛的面試者寫評價。剛剛寫到『對Linux的基本IO模型理解不深』這句的時候蕴轨,...
    創(chuàng)造new_world閱讀 1,252評論 1 5
  • 在網(wǎng)絡環(huán)境下橙弱,通俗的講歧寺,將IO分為兩步:1.等(數(shù)據(jù)準備時間)2.數(shù)據(jù)搬遷如果要想提高IO效率燥狰,需要將等的時間降低...
    城市里永遠的學習者閱讀 1,628評論 0 51
  • 上一篇《聊聊同步、異步斜筐、阻塞與非阻塞》已經(jīng)通俗的講解了龙致,要理解同步、異步顷链、阻塞與非阻塞重要的兩個概念點了目代,沒有看過...
    天草二十六_簡村人閱讀 791評論 0 4
  • 一、什么是socket嗤练?什么是I/O操作榛了? 我們都知道unix(like)世界里,一切皆文件煞抬,而文件是什么呢忽冻?文件...
    Alfie20閱讀 733評論 0 7
  • 按照《Unix網(wǎng)絡編程》的劃分,IO模型可以分為:阻塞IO遮婶、非阻塞IO蝗碎、IO復用、信號驅動IO和異步IO旗扑;按照PO...
    城市里永遠的學習者閱讀 975評論 0 49