在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

深度解讀epoll 的原理

Linux愛好者 ? 來源:Linux內(nèi)核那些事 ? 作者:Linux內(nèi)核那些事 ? 2021-06-04 16:56 ? 次閱讀

epoll 可以說是編寫高性能服務(wù)端程序必不可少的技術(shù),在介紹 epoll 之前,我們先來了解一下 多路復(fù)用I/O 吧。

多路復(fù)用I/O多路復(fù)用I/O:是指內(nèi)核負(fù)責(zé)監(jiān)聽多個(gè) I/O 流,當(dāng)任何一個(gè) I/O 流處于就緒狀態(tài)(可讀或可寫)時(shí)都會(huì)通知進(jìn)程,以便可以處理該 I/O 流上的數(shù)據(jù)。如 圖1 所示:

b158838e-c482-11eb-9e57-12bb97331649.png

如 圖1 所示,內(nèi)核負(fù)責(zé)監(jiān)聽多個(gè) I/O 流,當(dāng)某些 I/O 流變?yōu)榫途w狀態(tài),內(nèi)核會(huì)把這些 I/O 流添加到就緒隊(duì)列中,然后通知進(jìn)程處理就緒隊(duì)列中的 I/O 流。

與傳統(tǒng)的阻塞型 I/O 相比,多路復(fù)用 I/O 的優(yōu)點(diǎn)是可以同時(shí)監(jiān)聽多個(gè) I/O 流,并且會(huì)把就緒的 I/O 流告知進(jìn)程。

epoll原理介紹完多路復(fù)用 I/O,接下來開始介紹我們的主角:epoll。

Linux 系統(tǒng)中,有多種多路復(fù)用 I/O 的實(shí)現(xiàn),比如 select 和 poll 等。而 epoll 也是多路復(fù)用 I/O 一種實(shí)現(xiàn),與 select 和 poll 相比,epoll 在性能上有較大的提升。

紅黑樹

epoll 內(nèi)部使用紅黑樹來保存所有監(jiān)聽的 socket,紅黑樹是一種平衡二叉樹,添加和查找元素的時(shí)間復(fù)雜度為 O(log n),其結(jié)構(gòu)如 圖2 所示:

b1689602-c482-11eb-9e57-12bb97331649.png

epoll 通過 socket 句柄來作為 key,把 socket 保存在紅黑樹中。如 圖2 所示,每個(gè)節(jié)點(diǎn)中的數(shù)字代表著 socket 句柄。

把監(jiān)聽的 socket 保存在紅黑樹中的目的是,為了在修改監(jiān)聽 socket 的讀寫事件時(shí),能夠通過 socket 句柄快速找到對應(yīng)的 socket 對象。

就緒隊(duì)列

另外,epoll 還維護(hù)著一個(gè)就緒隊(duì)列,當(dāng) epoll 監(jiān)聽的 socket 狀態(tài)發(fā)生改變(變?yōu)榭勺x或可寫)時(shí),就會(huì)把就緒的 socket 添加到就緒隊(duì)列中。如 圖3 所示:

b172e3e6-c482-11eb-9e57-12bb97331649.png

當(dāng) socket 從網(wǎng)絡(luò)中獲取到數(shù)據(jù)后,會(huì)發(fā)生通知給 epoll,epoll 會(huì)將當(dāng)前 socket 添加到就緒隊(duì)列中,并且喚醒等待中的進(jìn)程(也就是調(diào)用 epoll_wait 的進(jìn)程)。

當(dāng) socket 狀態(tài)發(fā)生變化時(shí),會(huì)調(diào)用 ep_poll_callback 函數(shù)來通知 epoll,我們來看看這個(gè)函數(shù)的處理過程:

static int ep_poll_callback(wait_queue_t *wait, unsigned mode, int sync, void *key){ 。。. struct epitem *epi = ep_item_from_wait(wait); struct eventpoll *ep = epi-》ep; 。。. // 1) 把 socket 添加到就緒隊(duì)列中 list_add_tail(&epi-》rdllink, &ep-》rdllist);

is_linked: // 2) 喚醒調(diào)用 epoll_wait() 而被阻塞的進(jìn)程 if (waitqueue_active(&ep-》wq)) wake_up_locked(&ep-》wq); 。。. return 1;}

ep_poll_callback 函數(shù)的意圖很清晰,主要完成兩個(gè)工作:

把就緒的 socket 添加到就緒隊(duì)列中。

喚醒調(diào)用 epoll_wait 函數(shù)而被阻塞的進(jìn)程。

當(dāng)進(jìn)程被喚醒后,就會(huì)從就緒隊(duì)列中,把就緒的 socket 復(fù)制到用戶提供的數(shù)組中。如 圖4 所示:

b17fa086-c482-11eb-9e57-12bb97331649.png

如 圖4 所示,在調(diào)用 epoll_wait 時(shí)需要提供一個(gè) events 數(shù)組來存儲(chǔ)就緒的 socket。當(dāng) epoll_wait 返回后,用戶就可以從events 數(shù)組中獲取到就緒的 socket,并可對其進(jìn)行讀寫操作。

總結(jié)本文主要通過圖解的方式大概介紹了 epoll 的原理,但很多實(shí)現(xiàn)的細(xì)節(jié)只能通過閱讀源碼來了解。

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7233

    瀏覽量

    90834
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4365

    瀏覽量

    63940
  • epoll
    +關(guān)注

    關(guān)注

    0

    文章

    28

    瀏覽量

    3090

原文標(biāo)題:圖解:epoll怎么實(shí)現(xiàn)的

文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    兆易創(chuàng)新人形機(jī)器人方案 深度解讀

    三個(gè)維度展開深度解讀: 一、核心產(chǎn)品型號與應(yīng)用場景 (一)主控MCU:多場景精準(zhǔn)適配 GD32H7系列(高性能計(jì)算) 代表型號 :GD32H75E(Cortex-M7內(nèi)核,600MHz主頻) 特性 : 雙發(fā)射6級流水線架構(gòu)+雙精度浮點(diǎn)單元(FPU),支持復(fù)雜算法(如逆運(yùn)動(dòng)
    的頭像 發(fā)表于 05-07 15:56 ?128次閱讀

    華為全液冷兆瓦級超充技術(shù)深度解讀

    一、華為全液冷兆瓦級超充技術(shù)深度解讀 1. 技術(shù)定義與核心參數(shù) 華為全液冷兆瓦級超充技術(shù)是全球首個(gè)兆瓦級液冷超充解決方案,峰值功率達(dá)1.5兆瓦,雙槍持續(xù)電流2400A,每分鐘補(bǔ)能20度電。針對300
    的頭像 發(fā)表于 04-24 11:37 ?1048次閱讀
    華為全液冷兆瓦級超充技術(shù)<b class='flag-5'>深度</b><b class='flag-5'>解讀</b>

    谷歌第七代TPU Ironwood深度解讀:AI推理時(shí)代的硬件革命

    谷歌第七代TPU Ironwood深度解讀:AI推理時(shí)代的硬件革命 Google 發(fā)布了 Ironwood,這是其第七代張量處理單元 (TPU),專為推理而設(shè)計(jì)。這款功能強(qiáng)大的 AI 加速器旨在處理
    的頭像 發(fā)表于 04-12 11:10 ?1387次閱讀
    谷歌第七代TPU Ironwood<b class='flag-5'>深度</b><b class='flag-5'>解讀</b>:AI推理時(shí)代的硬件革命

    英偉達(dá)Cosmos-Reason1 模型深度解讀

    。以下從技術(shù)架構(gòu)、訓(xùn)練策略、核心能力及行業(yè)影響四方面展開深度解讀: Cosmos-Reason 1:從物理 AI 常識到具體決策 物理 AI 系統(tǒng)需要感知、理解和執(zhí)行物理世界中的復(fù)雜作。在本文中,我們提出了 Cosmos-Reason1 模型,該模型可以理解物理世界并通過
    的頭像 發(fā)表于 03-29 23:29 ?1468次閱讀

    飛騰公司榮獲2024年中國產(chǎn)學(xué)研深度融合好案例

    上臺領(lǐng)獎(jiǎng)。 本屆大會(huì)以政策解讀、主旨演講、交流互動(dòng)、案例分享、成果發(fā)布、需求對接等多種形式,聚焦科技創(chuàng)新與產(chǎn)業(yè)創(chuàng)新深度融合主題,展現(xiàn)了 2024 年通過產(chǎn)學(xué)研深度融合做出貢獻(xiàn)的產(chǎn)學(xué)研科技創(chuàng)新團(tuán)隊(duì)、創(chuàng)新人物和科技創(chuàng)新成果;發(fā)布了產(chǎn)
    的頭像 發(fā)表于 03-19 09:02 ?687次閱讀

    深度解讀 30KPA64A 單向 TVS:64V 擊穿機(jī)制與高效防護(hù)策略

    深度解讀 30KPA64A 單向 TVS:64V 擊穿機(jī)制與高效防護(hù)策略
    的頭像 發(fā)表于 02-24 13:52 ?241次閱讀
    <b class='flag-5'>深度</b><b class='flag-5'>解讀</b> 30KPA64A 單向 TVS:64V 擊穿機(jī)制與高效防護(hù)策略

    MOSFET參數(shù)解讀

    SGT-MOSFET各項(xiàng)參數(shù)解讀
    發(fā)表于 12-30 14:15 ?1次下載

    PCM1680 does not support a board-to-board interface不支持板對板的是怎么解讀

    The PCM1680 does not support a board-to-board interface不支持板對板的是怎么解讀
    發(fā)表于 12-11 07:31

    4G模組加解密藝術(shù):通用函數(shù)的深度解讀

    今天是對加解密通用函數(shù)的深度解讀,我將詳細(xì)講解,建議收藏,不可錯(cuò)過。
    的頭像 發(fā)表于 11-12 09:58 ?515次閱讀
    4G模組加解密藝術(shù):通用函數(shù)的<b class='flag-5'>深度</b><b class='flag-5'>解讀</b>

    京準(zhǔn)電鐘解讀:PTP時(shí)鐘同步系統(tǒng)及應(yīng)用是什么?

    京準(zhǔn)電鐘解讀:PTP時(shí)鐘同步系統(tǒng)及應(yīng)用是什么?
    的頭像 發(fā)表于 10-31 09:35 ?623次閱讀
    京準(zhǔn)電鐘<b class='flag-5'>解讀</b>:PTP時(shí)鐘同步系統(tǒng)及應(yīng)用是什么?

    深度解讀 VCXO VG7050CDN:可變晶體振蕩器的卓越之選

    深度解讀 VCXO VG7050CDN:可變晶體振蕩器的卓越之選
    的頭像 發(fā)表于 07-24 10:58 ?564次閱讀

    解讀MIPI A-PHY與車載Serdes芯片技術(shù)與測試

    上一期,《汽車芯片標(biāo)準(zhǔn)體系建設(shè)指南》技術(shù)解讀與功率芯片測量概覽中,我們給大家介紹了工信部印發(fā)的《汽車芯片標(biāo)準(zhǔn)體系建設(shè)指南》涉及到的重點(diǎn)芯片與測試領(lǐng)域解讀,本期繼續(xù)給大家做延展,我們解讀的是MIPI A-PHY與車載Serdes芯
    的頭像 發(fā)表于 07-24 10:14 ?3857次閱讀
    <b class='flag-5'>解讀</b>MIPI A-PHY與車載Serdes芯片技術(shù)與測試

    ESP32 深度睡眠

    使用的是ESP32S2 idf 5.2.2 官方代碼歷程deep_sleep 進(jìn)入深度睡眠 睡眠后功耗為1.9mA,一直降不下去。
    發(fā)表于 07-11 09:50

    解讀PyTorch模型訓(xùn)練過程

    PyTorch作為一個(gè)開源的機(jī)器學(xué)習(xí)庫,以其動(dòng)態(tài)計(jì)算圖、易于使用的API和強(qiáng)大的靈活性,在深度學(xué)習(xí)領(lǐng)域得到了廣泛的應(yīng)用。本文將深入解讀PyTorch模型訓(xùn)練的全過程,包括數(shù)據(jù)準(zhǔn)備、模型構(gòu)建、訓(xùn)練循環(huán)、評估與保存等關(guān)鍵步驟,并結(jié)合相關(guān)數(shù)字和信息進(jìn)行詳細(xì)闡述。
    的頭像 發(fā)表于 07-03 16:07 ?1605次閱讀

    深度學(xué)習(xí)的典型模型和訓(xùn)練過程

    深度學(xué)習(xí)作為人工智能領(lǐng)域的一個(gè)重要分支,近年來在圖像識別、語音識別、自然語言處理等多個(gè)領(lǐng)域取得了顯著進(jìn)展。其核心在于通過構(gòu)建復(fù)雜的神經(jīng)網(wǎng)絡(luò)模型,從大規(guī)模數(shù)據(jù)中自動(dòng)學(xué)習(xí)并提取特征,進(jìn)而實(shí)現(xiàn)高效準(zhǔn)確的預(yù)測和分類。本文將深入解讀深度學(xué)
    的頭像 發(fā)表于 07-03 16:06 ?2441次閱讀
    主站蜘蛛池模板: 亚洲色图综合 | a视频免费看 | 天天狠狠干 | 色五丁香 | aika中文字幕永久在线 | 511韩国理论片在线观看 | 成人综合网址 | 亚洲免费黄色网址 | 午夜视频在线观看视频 | 天天综合天天色 | 午夜一区二区三区 | 轻点灬大ji巴太大太深了 | www.一区二区三区 | 色视频2| 天天操天天弄 | 亚洲精品色图 | 国产黄大片在线观看 | 一区二区在线观看高清 | 在线视频人人视频www | 男人cao女人视频在线观看 | 韩国三级久久精品 | 激情在线网站 | 天天摸天天操免费播放小视频 | 超级乱淫小黄文小说 | 日本暴力喉深到呕吐hd | 天天射夜夜爽 | 男女激情做爰叫床声视频偷拍 | 免费看性 | 四虎永久免费网站免费观看 | 国产三级在线看 | 97影院理伦在线观看 | 天天摸天天碰成人免费视频 | 久久久久国产免费 | 美女免费视频一区二区三区 | 欧美一区二区精品 | 欧美亚洲天堂网 | 天天做天天爱夜夜爽毛片毛片 | 国产精品久久久久久福利 | 国产成人综合欧美精品久久 | 五月婷婷激情 | 丁香婷婷基地 |