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

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

深度解讀epoll 的原理

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

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

多路復用I/O多路復用I/O:是指內核負責監聽多個 I/O 流,當任何一個 I/O 流處于就緒狀態(可讀或可寫)時都會通知進程,以便可以處理該 I/O 流上的數據。如 圖1 所示:

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

如 圖1 所示,內核負責監聽多個 I/O 流,當某些 I/O 流變為就緒狀態,內核會把這些 I/O 流添加到就緒隊列中,然后通知進程處理就緒隊列中的 I/O 流。

與傳統的阻塞型 I/O 相比,多路復用 I/O 的優點是可以同時監聽多個 I/O 流,并且會把就緒的 I/O 流告知進程。

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

Linux 系統中,有多種多路復用 I/O 的實現,比如 select 和 poll 等。而 epoll 也是多路復用 I/O 一種實現,與 select 和 poll 相比,epoll 在性能上有較大的提升。

紅黑樹

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

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

epoll 通過 socket 句柄來作為 key,把 socket 保存在紅黑樹中。如 圖2 所示,每個節點中的數字代表著 socket 句柄。

把監聽的 socket 保存在紅黑樹中的目的是,為了在修改監聽 socket 的讀寫事件時,能夠通過 socket 句柄快速找到對應的 socket 對象。

就緒隊列

另外,epoll 還維護著一個就緒隊列,當 epoll 監聽的 socket 狀態發生改變(變為可讀或可寫)時,就會把就緒的 socket 添加到就緒隊列中。如 圖3 所示:

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

當 socket 從網絡中獲取到數據后,會發生通知給 epoll,epoll 會將當前 socket 添加到就緒隊列中,并且喚醒等待中的進程(也就是調用 epoll_wait 的進程)。

當 socket 狀態發生變化時,會調用 ep_poll_callback 函數來通知 epoll,我們來看看這個函數的處理過程:

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 添加到就緒隊列中 list_add_tail(&epi-》rdllink, &ep-》rdllist);

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

ep_poll_callback 函數的意圖很清晰,主要完成兩個工作:

把就緒的 socket 添加到就緒隊列中。

喚醒調用 epoll_wait 函數而被阻塞的進程。

當進程被喚醒后,就會從就緒隊列中,把就緒的 socket 復制到用戶提供的數組中。如 圖4 所示:

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

如 圖4 所示,在調用 epoll_wait 時需要提供一個 events 數組來存儲就緒的 socket。當 epoll_wait 返回后,用戶就可以從events 數組中獲取到就緒的 socket,并可對其進行讀寫操作。

總結本文主要通過圖解的方式大概介紹了 epoll 的原理,但很多實現的細節只能通過閱讀源碼來了解。

編輯:jq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據
    +關注

    關注

    8

    文章

    7073

    瀏覽量

    89147
  • 函數
    +關注

    關注

    3

    文章

    4333

    瀏覽量

    62723
  • epoll
    +關注

    關注

    0

    文章

    28

    瀏覽量

    2967

原文標題:圖解:epoll怎么實現的

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

收藏 人收藏

    評論

    相關推薦

    MOSFET參數解讀

    SGT-MOSFET各項參數解讀
    發表于 12-30 14:15 ?1次下載

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

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

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

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

    京準電鐘解讀:PTP時鐘同步系統及應用是什么?

    京準電鐘解讀:PTP時鐘同步系統及應用是什么?
    的頭像 發表于 10-31 09:35 ?277次閱讀
    京準電鐘<b class='flag-5'>解讀</b>:PTP時鐘同步系統及應用是什么?

    FPGA做深度學習能走多遠?

    ,共同進步。 歡迎加入FPGA技術微信交流群14群! 交流問題(一) Q:FPGA做深度學習能走多遠?現在用FPGA做深度學習加速成為一個熱門,深鑒科技,商湯,曠視科技等都有基于FPGA做深度學習的項目
    發表于 09-27 20:53

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

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

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

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

    ESP32 深度睡眠

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

    為什么深度睡眠期間RTC定時器會丟失呢?

    RTC定時器在深度睡眠期間丟失是否是一種設計功能?我觀察到以下內容(使用 SDK 1.3): The chip is awakened from deep sleep after a timer
    發表于 07-11 07:17

    解讀PyTorch模型訓練過程

    PyTorch作為一個開源的機器學習庫,以其動態計算圖、易于使用的API和強大的靈活性,在深度學習領域得到了廣泛的應用。本文將深入解讀PyTorch模型訓練的全過程,包括數據準備、模型構建、訓練循環、評估與保存等關鍵步驟,并結合相關數字和信息進行詳細闡述。
    的頭像 發表于 07-03 16:07 ?1092次閱讀

    深度學習的典型模型和訓練過程

    深度學習作為人工智能領域的一個重要分支,近年來在圖像識別、語音識別、自然語言處理等多個領域取得了顯著進展。其核心在于通過構建復雜的神經網絡模型,從大規模數據中自動學習并提取特征,進而實現高效準確的預測和分類。本文將深入解讀深度
    的頭像 發表于 07-03 16:06 ?1544次閱讀

    深度解析深度學習下的語義SLAM

    隨著深度學習技術的興起,計算機視覺的許多傳統領域都取得了突破性進展,例如目標的檢測、識別和分類等領域。近年來,研究人員開始在視覺SLAM算法中引入深度學習技術,使得深度學習SLAM系統獲得了迅速發展,并且比傳統算法展現出更高的精
    發表于 04-23 17:18 ?1314次閱讀
    <b class='flag-5'>深度</b>解析<b class='flag-5'>深度</b>學習下的語義SLAM

    深度解讀廣汽全固態電池技術

    4月12日,在“科技視界”廣汽科技日活動上,廣汽集團發布了被稱為“全球動力電池領域競爭的技術高地”的全固態動力電池技術,廣汽埃安電池研發部負責人李進對此項技術進行了解讀
    的頭像 發表于 04-15 09:15 ?553次閱讀
    <b class='flag-5'>深度</b><b class='flag-5'>解讀</b>廣汽全固態電池技術

    EMC技術:基礎概念到應用的解讀

    EMC技術:基礎概念到應用的解讀?|深圳比創達電子
    的頭像 發表于 03-11 11:55 ?603次閱讀
    EMC技術:基礎概念到應用的<b class='flag-5'>解讀</b>?

    PSoC CAN不會從深度睡眠中醒來是怎么回事?

    親愛的論壇:我們用 PSoC6 開發了嵌入式軟件。 但是我們遇到了以下問題:在某些主板上,PSoC6 CAN無法從深度睡眠中醒來。 我們通過以下方法開發了深度睡眠和醒來過程: 第 1 步:關閉
    發表于 01-31 08:03
    主站蜘蛛池模板: xx视频在线观看| 在线免费看片a| 噜噜噜色| 久操视屏| 免费看国产精品久久久久| 国产nv精品你懂得| 国产图片区| 男女爱爱免费视频| 噜噜吧噜噜色| 国产小视频你懂的| 一区免费| 免费jlzzjlzz在线播放视频| 国产成人影院在线观看| 好骚综合在线| 免费可以看黄的视频 s色| 一级毛片真人免费观看| 特级毛片aaa免费版| 求网址你懂的手机在线观看网站| 四虎免费影院4hu永久免费| 三级网站免费看| 久久婷婷国产综合精品| 99久久免费精品视频| 天天插天天干| 亚洲人成影院在线高清| aa2424在线视频看片| 国产免费福利网站| 狂野欧美性色xo影院| 国产视频黄| 黄网站在线观看视频| 色香首页| 四虎永久免费影院在线| 欧美式free群乱| 美女拍拍拍免费视频观看| 国产精品免费视频拍拍拍| 天天干天天拍天天射| 1024手机在线看| 精品国产成人三级在线观看| 四虎国产成人亚洲精品| 狠狠亚洲狠狠欧洲2019| 手机看片自拍| 国产重口老太和小伙乱视频|