国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

    文章

    7335

    瀏覽量

    94763
  • 函數
    +關注

    關注

    3

    文章

    4417

    瀏覽量

    67504
  • epoll
    +關注

    關注

    0

    文章

    28

    瀏覽量

    3312

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    HarmonyOSAI編程智能代碼解讀

    CodeGenie > Explain Code,開始解讀當前代碼內容。 說明 最多支持解讀20000字符以內的代碼片段。 使用該功能需先完成CodeGenie登錄授權。 本文主要從參考引用自HarmonyOS官方文檔
    發表于 09-02 16:29

    HarmonyOS AI輔助編程工具(CodeGenie)代碼智能解讀

    。 選中.ets文件或者.cpp文件中需要被解釋的代碼行或代碼片段,右鍵選擇CodeGenie > Explain Code,開始解讀當前代碼內容。 說明 ?最多支持解讀20000字符以內
    發表于 07-17 17:02

    AI SoC #BK7258 AI能力和技術參數深度解讀

    BK7258芯片AI能力深度解讀 BK7258是博通集成推出的一款高集成度Wi-Fi 6+藍牙5.4低功耗音視頻SoC芯片,其AI能力通過硬件加速、算法優化及生態整合實現,覆蓋邊緣計算、端云協同兩大
    的頭像 發表于 06-20 09:44 ?6754次閱讀
    AI SoC #BK7258 AI能力和技術參數<b class='flag-5'>深度</b><b class='flag-5'>解讀</b>

    直播 | GB/T 45086與ISO11451標準深度解讀研討會筆記請查收!

    6月12日,《德思特GB/T 45086與ISO11451標準深度解讀》線上研討會圓滿結束。感謝大家的觀看與支持!在直播間收到一些觀眾的技術問題,我們匯總了熱點問題并請講師詳細解答,在此整理分享給大家,請查收!
    的頭像 發表于 06-18 11:06 ?1035次閱讀
    直播 | GB/T 45086與ISO11451標準<b class='flag-5'>深度</b><b class='flag-5'>解讀</b>研討會筆記請查收!

    革命性神經形態微控制器 ?**Pulsar**? 的深度技術解讀

    以下是對荷蘭公司Innatera推出的革命性神經形態微控制器 ? Pulsar ? 的深度技術解讀,結合其架構設計、性能突破、應用場景及產業意義進行綜合分析: 一、核心技術原理:神經形態架構的突破
    的頭像 發表于 06-07 13:06 ?1673次閱讀
    革命性神經形態微控制器 ?**Pulsar**? 的<b class='flag-5'>深度</b>技術<b class='flag-5'>解讀</b>

    瑞薩365 深度解讀

    技術架構、核心功能、行業影響及未來展望四個維度進行深度解讀: 一、技術架構:融合硬件與設計軟件的跨領域協作平臺 瑞薩365基于Altium 365云平臺構建,整合了瑞薩的半導體產品組合與Altium的設計工具鏈,形成從芯片選型到系統部署的全流程數字環境。其核心架構圍繞 五
    的頭像 發表于 06-06 09:58 ?2192次閱讀
    瑞薩365 <b class='flag-5'>深度</b><b class='flag-5'>解讀</b>

    蘋果A20芯片的深度解讀

    以下是基于最新行業爆料對蘋果A20芯片的深度解讀,綜合技術革新、性能提升及行業影響三大維度分析: 一、核心技術創新 ? ? 制程工藝突破 ? ? 全球首款2nm芯片 ?:采用臺積電N2(第一代2納米
    的頭像 發表于 06-06 09:32 ?3725次閱讀

    ARM Mali GPU 深度解讀

    ARM Mali GPU 深度解讀 ARM Mali 是 Arm 公司面向移動設備、嵌入式系統和基礎設施市場設計的圖形處理器(GPU)IP 核,憑借其異構計算架構、能效優化和生態協同,成為全球移動
    的頭像 發表于 05-29 10:12 ?4325次閱讀

    Arm 公司面向 PC 市場的 ?Arm Niva? 深度解讀

    面向 PC 市場的 ? Arm Niva ? 深度解讀 ? Arm Niva ? 是 Arm 公司為 PC 市場推出的核心計算平臺,屬于其“平臺優先”戰略的關鍵布局。作為 ? Arm 計算
    的頭像 發表于 05-29 09:56 ?1633次閱讀

    Arm 公司面向移動端市場的 ?Arm Lumex? 深度解讀

    面向移動端市場的 ? Arm Lumex ? 深度解讀 ? Arm Lumex ? 是 Arm 公司面向移動設備市場推出的新一代計算平臺,隸屬于其“平臺優先”戰略的核心布局。作為 ? Arm 計算
    的頭像 發表于 05-29 09:54 ?4379次閱讀

    Arm 公司面向汽車市場的 ?Arm Zena? 深度解讀

    面向汽車市場的 ? Arm Zena ? 深度解讀 Arm Zena 是 Arm 公司面向智能汽車領域推出的核心計算平臺,屬于其“平臺優先”戰略的關鍵布局。作為 Arm 計算子系統(CSS)在
    的頭像 發表于 05-29 09:51 ?2465次閱讀

    SPI協議,寄存器解讀

    最近在學習SPI協議,對寄存器操作不是特別熟練。發帖希望有大佬能從寄存器角度提供幫助,幫忙指導根據手冊去解讀協議。有償。
    發表于 05-22 20:08

    兆易創新人形機器人方案 深度解讀

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

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

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

    英偉達Cosmos-Reason1 模型深度解讀

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