女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(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)聽多個 I/O 流,當(dāng)任何一個 I/O 流處于就緒狀態(tài)(可讀或可寫)時都會通知進(jìn)程,以便可以處理該 I/O 流上的數(shù)據(jù)。如 圖1 所示:

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

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

與傳統(tǒng)的阻塞型 I/O 相比,多路復(fù)用 I/O 的優(yōu)點(diǎn)是可以同時監(jiān)聽多個 I/O 流,并且會把就緒的 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,紅黑樹是一種平衡二叉樹,添加和查找元素的時間復(fù)雜度為 O(log n),其結(jié)構(gòu)如 圖2 所示:

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

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

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

就緒隊(duì)列

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

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

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

當(dāng) socket 狀態(tài)發(fā)生變化時,會調(diào)用 ep_poll_callback 函數(shù)來通知 epoll,我們來看看這個函數(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ù)的意圖很清晰,主要完成兩個工作:

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

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

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

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

如 圖4 所示,在調(diào)用 epoll_wait 時需要提供一個 events 數(shù)組來存儲就緒的 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)系本站處理。 舉報投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7241

    瀏覽量

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

    關(guān)注

    3

    文章

    4370

    瀏覽量

    64193
  • epoll
    +關(guān)注

    關(guān)注

    0

    文章

    28

    瀏覽量

    3114

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

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

收藏 人收藏

    評論

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

    ARM Mali GPU 深度解讀

    ARM Mali GPU 深度解讀 ARM Mali 是 Arm 公司面向移動設(shè)備、嵌入式系統(tǒng)和基礎(chǔ)設(shè)施市場設(shè)計的圖形處理器(GPU)IP 核,憑借其異構(gòu)計算架構(gòu)、能效優(yōu)化和生態(tài)協(xié)同,成為全球移動
    的頭像 發(fā)表于 05-29 10:12 ?313次閱讀

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

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

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

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

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

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

    SPI協(xié)議,寄存器解讀

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

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

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

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

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

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

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

    英偉達(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 ?1746次閱讀

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

    深度解讀 30KPA64A 單向 TVS:64V 擊穿機(jī)制與高效防護(hù)策略
    的頭像 發(fā)表于 02-24 13:52 ?272次閱讀
    <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次下載

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

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

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

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

    解讀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 ?4065次閱讀
    <b class='flag-5'>解讀</b>MIPI A-PHY與車載Serdes芯片技術(shù)與測試

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

    PyTorch作為一個開源的機(jī)器學(xué)習(xí)庫,以其動態(tài)計算圖、易于使用的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 ?1727次閱讀