I/O 多路復用

什么是 I/O 多路復用:
I/O 多路復用指的是可以通過某種機制母蛛,監(jiān)視多個文件描述符,一旦某個文件描述符準備就緒后,就能夠通知程序進行相關的讀寫操作端壳,目前 I/O 多路復用機制主要包含三種:select痊剖、poll韩玩、epoll

select:
select 函數監(jiān)視的文件描述符包含三類:writefds、readfds陆馁、exceptfds找颓,當調用 select 函數后,會有阻塞叮贩,直到有相關的文件描述符準備就緒击狮,select 函數返回,當返回后益老,可以通過遍歷 fdset 獲取相關的已經準備就緒的文件描述符

select 函數的本質是通過設置或者檢查存放 fd 標志位的數據結構進行下一次的處理彪蓬,select 機制包含有幾個缺點:

  1. 單個進程能打開的文件描述符有數量限制,由 FD_SETSIZE 控制捺萌,默認是 1024
  2. 掃描 socket 的時候档冬,采用的是線性掃描,也就是輪詢的方式,這樣的話效率比較低
  3. 需要維護一個用于保存大量 fd 的數據結構酷誓,這樣的話會使得在用戶態(tài)和內核空間之間傳遞該數據結構的時候增大復制的開銷

poll:
poll 和 select 在本質上沒有太大的差別披坏, poll 將用戶傳入的數組拷貝至內核空間,查詢每一個 fd 對應的設備狀態(tài)盐数,如果 fd 對應的設備狀態(tài)處于準備就緒刮萌,則會在設備等待列表中存入一項繼續(xù)遍歷,如果遍歷完所有 fd 后發(fā)現沒有處于準備就緒狀態(tài)的設備娘扩,那么會將當前進程掛起着茸,直到有相關設備處于準備就緒狀態(tài),再次被喚醒琐旁,等被喚醒后需要再次進行多次遍歷

poll 機制中沒有最大連接數的限制涮阔,因為它采用的是鏈表方式存儲,但是這樣做會有一些缺陷:

  1. 大量的 fd 的數組被整體復制于用戶空間和內核地址空間中灰殴,而不管這些復制是不是有意義
  2. poll 還有一個特點敬特,支持水平觸發(fā),如果 fd 被上報但是沒有被處理牺陶,那么下一次 poll 時會繼續(xù)上報這個 fd

epoll:
epoll 是 select 和 poll 的增強版本伟阔,epoll 相比較于 select 和 poll 更加的靈活,epoll 使用一個文件描述符管理多個文件描述符掰伸,將用戶關系的文件描述符的事件保存在一個內核的時間列表中皱炉,這樣在用戶空間和內核空間只需要復制一次

epoll:
epoll 支持水平觸發(fā)和邊緣觸發(fā),最大的優(yōu)點在于邊緣觸發(fā)狮鸭,它只會告訴進程剛剛變?yōu)闇蕚渚途w狀態(tài)的 fd合搅,并且只會通知一次,還有一個特點是歧蕉,它采用的是事件就緒的通知方式灾部,通過 epoll_ctl 注冊 fd,一旦 fd 準備就緒后惯退,內核會采用類似 callback 回調函數的機制激活 fd赌髓,然后 epoll_await 等待通知

epoll的優(yōu)點:

  1. 沒有最大并發(fā)連接數的限制,打開 fd 的上限遠高于 1024
  2. epoll 的效率高催跪,沒有采用輪詢的方式锁蠕,不會隨著 fd 的數目增加而降低效率,只有處于活躍狀態(tài)的 fd 才會調用 callback 函數叠荠,epoll 最大的特點就在于它只管活躍狀態(tài)的連接匿沛,和連接總數沒有關系扫责,這也是在實際網絡中 epoll 要比 poll 和 select 效率高的原因
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末榛鼎,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌者娱,老刑警劉巖抡笼,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異黄鳍,居然都是意外死亡推姻,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門框沟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來藏古,“玉大人,你說我怎么就攤上這事忍燥∨≡危” “怎么了?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵梅垄,是天一觀的道長厂捞。 經常有香客問我,道長队丝,這世上最難降的妖魔是什么靡馁? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮机久,結果婚禮上臭墨,老公的妹妹穿的比我還像新娘。我一直安慰自己膘盖,他們只是感情好裙犹,可當我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著衔憨,像睡著了一般叶圃。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上践图,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天掺冠,我揣著相機與錄音,去河邊找鬼码党。 笑死德崭,一個胖子當著我的面吹牛,可吹牛的內容都是我干的揖盘。 我是一名探鬼主播眉厨,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼兽狭!你這毒婦竟也來了憾股?” 一聲冷哼從身側響起阶捆,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤贞言,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體畔裕,經...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡法精,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年粥谬,在試婚紗的時候發(fā)現自己被綠了进胯。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡粉渠,死狀恐怖分冈,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情霸株,我是刑警寧澤丈秩,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站淳衙,受9級特大地震影響蘑秽,放射性物質發(fā)生泄漏。R本人自食惡果不足惜箫攀,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一肠牲、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧靴跛,春花似錦缀雳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至绝葡,卻和暖如春深碱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背藏畅。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工敷硅, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人愉阎。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓绞蹦,卻偏偏與公主長得像,于是被迫代替她去往敵國和親榜旦。 傳聞我的和親對象是個殘疾皇子幽七,可洞房花燭夜當晚...
    茶點故事閱讀 43,452評論 2 348