国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

說說IO多路復(fù)用

這篇具有很好參考價(jià)值的文章主要介紹了說說IO多路復(fù)用。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

分析&回答

IO多路復(fù)用

I/O multiplexing 這里面的 multiplexing 指的其實(shí)是在單個(gè)線程通過記錄跟蹤每一個(gè)Sock(I/O流)的狀態(tài)(對(duì)應(yīng)空管塔里面的Fight progress strip槽)來同時(shí)管理多個(gè)I/O流。直白點(diǎn)說:多路指的是多個(gè)socket連接,復(fù)用指的是復(fù)用一個(gè)線程進(jìn)行管理。發(fā)明它的原因,是盡量多的提高服務(wù)器的吞吐能力。

Linux IO多路復(fù)用依次出現(xiàn)了select、poll、epoll實(shí)現(xiàn),可以認(rèn)為select、poll是過期產(chǎn)品,現(xiàn)在推薦使用epoll,epoll性能比其他幾者要好。

Epoll介紹

epoll是linux2.6內(nèi)核的一個(gè)新的系統(tǒng)調(diào)用,epoll在設(shè)計(jì)之初,就是為了替代select, poll線性復(fù)雜度的模型,epoll的時(shí)間復(fù)雜度為O(1), 也就意味著,epoll在高并發(fā)場(chǎng)景,隨著文件描述符的增長(zhǎng),有良好的可擴(kuò)展性。

  • select?和?poll?監(jiān)聽文件描述符list,進(jìn)行一個(gè)線性的查找 O(n)
  • epoll: 使用了內(nèi)核文件級(jí)別的回調(diào)機(jī)制O(1)

Epoll高效原理

  • 調(diào)用epoll_create時(shí),內(nèi)核除了幫我們?cè)趀poll文件系統(tǒng)里建了個(gè)file結(jié)點(diǎn),在內(nèi)核cache里建了個(gè)RB-Tree紅黑樹用于存儲(chǔ)以后epoll_ctl傳來的socket外,還會(huì)再建立一個(gè)list鏈表,用于存儲(chǔ)準(zhǔn)備就緒的事件。
  • 調(diào)用epoll_wait時(shí),僅僅觀察這個(gè)list鏈表里有沒有數(shù)據(jù)即可。有數(shù)據(jù)就返回,沒有數(shù)據(jù)就sleep,等到timeout時(shí)間到后即使鏈表沒數(shù)據(jù)也返回。所以,epoll_wait非常高效。而且,通常情況下即使我們要監(jiān)控百萬計(jì)的句柄,大多一次也只返回很少量的準(zhǔn)備就緒句柄而已,所以,epoll_wait僅需要從內(nèi)核態(tài)copy少量的句柄到用戶態(tài)而已。

epoll高效的本質(zhì)在于:

  • 減少了用戶態(tài)和內(nèi)核態(tài)的文件句柄拷貝
  • 減少了對(duì)可讀可寫文件句柄的遍歷
  • mmap 加速了內(nèi)核與用戶空間的信息傳遞,epoll是通過內(nèi)核與用戶mmap同一塊內(nèi)存,避免了無謂的內(nèi)存拷貝
  • IO性能不會(huì)隨著監(jiān)聽的文件描述的數(shù)量增長(zhǎng)而下降
  • 使用紅黑樹存儲(chǔ)fd,以及對(duì)應(yīng)的回調(diào)函數(shù),其插入,查找,刪除的性能不錯(cuò),相比于hash,不必預(yù)先分配很多的空間

反思&擴(kuò)展

IO多路復(fù)用涉及知識(shí)較多,如果你想成為你的亮點(diǎn),就繼續(xù)了解,如果應(yīng)付問題,可以淺嘗輒止。

IO多路復(fù)用模型 Reactor

說說IO多路復(fù)用,網(wǎng)絡(luò)原理與編程,linux

說說IO多路復(fù)用,網(wǎng)絡(luò)原理與編程,linux

異步IO Proactor

“真正”的異步IO需要操作系統(tǒng)更強(qiáng)的支持。

說說IO多路復(fù)用,網(wǎng)絡(luò)原理與編程,linux

說說IO多路復(fù)用,網(wǎng)絡(luò)原理與編程,linux

Epoll事件有兩種模型

邊沿觸發(fā):edge-triggered (ET), 水平觸發(fā):level-triggered (LT)

  • 水平觸發(fā)(level-triggered)
    • socket接收緩沖區(qū)不為空 有數(shù)據(jù)可讀 讀事件一直觸發(fā)
    • socket發(fā)送緩沖區(qū)不滿 可以繼續(xù)寫入數(shù)據(jù) 寫事件一直觸發(fā)
  • 邊沿觸發(fā)(edge-triggered)
    • socket的接收緩沖區(qū)狀態(tài)變化時(shí)觸發(fā)讀事件,即空的接收緩沖區(qū)剛接收到數(shù)據(jù)時(shí)觸發(fā)讀事件
    • socket的發(fā)送緩沖區(qū)狀態(tài)變化時(shí)觸發(fā)寫事件,即滿的緩沖區(qū)剛空出空間時(shí)觸發(fā)讀事件 邊沿觸發(fā)僅觸發(fā)一次,水平觸發(fā)會(huì)一直觸發(fā)。

喵嗚面試助手:一站式解決面試問題,你可以搜索微信小程序 [喵嗚面試助手]?或關(guān)注 [喵嗚刷題] -> 面試助手?免費(fèi)刷題。如有好的面試知識(shí)或技巧期待您的共享!文章來源地址http://www.zghlxwxcb.cn/news/detail-697641.html

到了這里,關(guān)于說說IO多路復(fù)用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • BIO、NIO、IO多路復(fù)用模型詳細(xì)介紹&Java NIO 網(wǎng)絡(luò)編程

    BIO、NIO、IO多路復(fù)用模型詳細(xì)介紹&Java NIO 網(wǎng)絡(luò)編程

    上文介紹了網(wǎng)絡(luò)編程的基礎(chǔ)知識(shí),并基于 Java 編寫了 BIO 的網(wǎng)絡(luò)編程。我們知道 BIO 模型是存在巨大問題的,比如 C10K 問題,其本質(zhì)就是因其阻塞原因,導(dǎo)致如果想要承受更多的請(qǐng)求就必須有足夠多的線程,但是足夠多的線程會(huì)帶來內(nèi)存占用問題、CPU上下文切換帶來的性能問題

    2024年02月14日
    瀏覽(30)
  • 網(wǎng)絡(luò)模型與 IO 多路復(fù)用

    網(wǎng)絡(luò)模型與 IO 多路復(fù)用

    ??socket也稱作“套接字”,用于描述IP地址和端口,是一個(gè)通信鏈路的描述符。應(yīng)用程序通常通過“套接字”向?qū)Χ税l(fā)出請(qǐng)求或者應(yīng)答網(wǎng)絡(luò)請(qǐng)求。 ??socket是連接運(yùn)行在網(wǎng)絡(luò)上的兩個(gè)程序之間的通信端點(diǎn)。通信的兩端都有socket,它是一個(gè)通道,數(shù)據(jù)在兩個(gè)socket之間進(jìn)行傳輸

    2024年02月01日
    瀏覽(28)
  • Linux多路IO復(fù)用:epoll

    Linux多路IO復(fù)用:epoll

    ? ? ? ? epoll是為克服select、poll每次監(jiān)聽都需要在用戶、內(nèi)核空間反復(fù)拷貝,以及需要用戶程序自己遍歷發(fā)現(xiàn)有變化的文件描述符的缺點(diǎn)的多路IO復(fù)用技術(shù)。 epoll原理 創(chuàng)建內(nèi)核空間的紅黑樹; 將需要監(jiān)聽的文件描述符上樹; 內(nèi)核監(jiān)聽紅黑樹上文件描述符的變化; 返回有變化

    2024年02月04日
    瀏覽(22)
  • linux并發(fā)服務(wù)器 —— IO多路復(fù)用(八)

    linux并發(fā)服務(wù)器 —— IO多路復(fù)用(八)

    半關(guān)閉只能實(shí)現(xiàn)數(shù)據(jù)單方向的傳輸;當(dāng)TCP 接中A向 B 發(fā)送 FIN 請(qǐng)求關(guān)閉,另一端 B 回應(yīng)ACK 之后 (A 端進(jìn)入 FIN_WAIT_2 狀態(tài)),并沒有立即發(fā)送 FIN 給 A,A 方處于半連接狀態(tài) (半開關(guān)),此時(shí) A 可以接收 B 發(fā)送的數(shù)據(jù),但是 A 已經(jīng)不能再向 B 發(fā)送數(shù)據(jù) close不會(huì)影響到其他進(jìn)程,shutdown會(huì)

    2024年02月09日
    瀏覽(22)
  • Java NIO原理 (Selector、Channel、Buffer、零拷貝、IO多路復(fù)用)

    Java NIO原理 (Selector、Channel、Buffer、零拷貝、IO多路復(fù)用)

    系列文章目錄和關(guān)于我 最近有很多想學(xué)的,像netty的使用、原理源碼,但是苦于自己對(duì)于操作系統(tǒng)和nio了解不多,有點(diǎn)無從下手,遂學(xué)習(xí)之。 上圖粗略描述了網(wǎng)絡(luò)io的過程,了解其中的拷貝過程有利于我們理解非阻塞io,以及IO多路復(fù)用的必要性。 數(shù)據(jù)從網(wǎng)卡到內(nèi)核緩沖區(qū) 網(wǎng)

    2024年02月08日
    瀏覽(21)
  • Linux TCP/UDP socket 通信和IO多路復(fù)用

    主機(jī)字節(jié)序 16 位值 == 網(wǎng)絡(luò)字節(jié)序 16 位值 主機(jī)字節(jié)序 32 位值 == 網(wǎng)絡(luò)字節(jié)序 32 位值 主機(jī)字節(jié)序的字符串IP地址? == 網(wǎng)絡(luò)字節(jié)序的整形IP地址 將監(jiān)聽的套接字和本地IP和端口進(jìn)行關(guān)聯(lián) 給監(jiān)聽的套接字設(shè)置監(jiān)聽,開始檢測(cè)客戶端鏈接 等待并接受客戶端的連接,阻塞函數(shù),沒有客

    2024年02月05日
    瀏覽(25)
  • Linux多路IO復(fù)用技術(shù)——epoll詳解與一對(duì)多服務(wù)器實(shí)現(xiàn)

    Linux多路IO復(fù)用技術(shù)——epoll詳解與一對(duì)多服務(wù)器實(shí)現(xiàn)

    本文詳細(xì)介紹了Linux中epoll模型的優(yōu)化原理和使用方法,以及如何利用epoll模型實(shí)現(xiàn)簡(jiǎn)易的一對(duì)多服務(wù)器。通過對(duì)epoll模型的優(yōu)化和相關(guān)接口的解釋,幫助讀者理解epoll模型的工作原理和優(yōu)缺點(diǎn),同時(shí)附帶代碼實(shí)現(xiàn)和圖解說明。

    2024年02月05日
    瀏覽(27)
  • 02-Linux-IO多路復(fù)用之select、poll和epoll詳解

    02-Linux-IO多路復(fù)用之select、poll和epoll詳解

    前言: 在linux系統(tǒng)中,實(shí)際上所有的 I/O 設(shè)備都被抽象為了文件這個(gè)概念,一切皆文件,磁盤、網(wǎng)絡(luò)數(shù)據(jù)、終端,甚至進(jìn)程間通信工具管道 pipe 等都被當(dāng)做文件對(duì)待。 在了解多路復(fù)用 select、poll、epoll 實(shí)現(xiàn)之前,我們先簡(jiǎn)單回憶復(fù)習(xí)以下兩個(gè)概念: 一、什么是多路復(fù)用: 多路

    2024年02月10日
    瀏覽(25)
  • 使用Linux系統(tǒng)IO多路復(fù)用中eopll創(chuàng)建基于TCP通信協(xié)議的多人聊天室

    一.1.搭建好TCP的通信模型 2.創(chuàng)建紅黑樹根節(jié)點(diǎn)?3.將套接字事件添加到紅黑樹中,使其被監(jiān)聽 4.當(dāng)套接字事件發(fā)生,表示有客戶端連接,將連接事件加入到紅黑樹節(jié)點(diǎn)當(dāng)中 5.每當(dāng)連接事件發(fā)生時(shí),表示客戶端發(fā)送信息到服務(wù)器 6.每當(dāng)有事件準(zhǔn)備就緒時(shí),將對(duì)應(yīng)的紅黑樹節(jié)點(diǎn)信息

    2024年02月13日
    瀏覽(19)
  • 【高并發(fā)網(wǎng)絡(luò)通信架構(gòu)】引入IO多路復(fù)用(select,poll,epoll)實(shí)現(xiàn)高并發(fā)tcp服務(wù)端

    【高并發(fā)網(wǎng)絡(luò)通信架構(gòu)】引入IO多路復(fù)用(select,poll,epoll)實(shí)現(xiàn)高并發(fā)tcp服務(wù)端

    目錄 一,往期文章 二,基本概念 IO多路復(fù)用 select 模型 poll 模型 epoll 模型 select,poll,epoll 三者對(duì)比 三,函數(shù)清單 1.select 方法 2.fd_set 結(jié)構(gòu)體 3.poll 方法 4.struct pollfd 結(jié)構(gòu)體 5.epoll_create 方法 6.epoll_ctl 方法 7.epoll_wait 方法 8.struct epoll_event 結(jié)構(gòu)體 四,代碼實(shí)現(xiàn) select 操作流程 s

    2024年02月12日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包