内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

怎么理解UNIX的網(wǎng)絡I/O模型

這篇文章主要講解了“怎么理解UNIX的網(wǎng)絡I/O模型”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么理解UNIX的網(wǎng)絡I/O模型”吧!

從策劃到設計制作,每一步都追求做到細膩,制作可持續(xù)發(fā)展的企業(yè)網(wǎng)站。為客戶提供網(wǎng)站設計、網(wǎng)站制作、網(wǎng)站策劃、網(wǎng)頁設計、域名注冊、虛擬空間、網(wǎng)絡營銷、VI設計、 網(wǎng)站改版、漏洞修補等服務。為客戶提供更好的一站式互聯(lián)網(wǎng)解決方案,以客戶的口碑塑造優(yōu)易品牌,攜手廣大客戶,共同發(fā)展進步。

UNIX的網(wǎng)絡I/O模型:

    概念:
        1)linux內(nèi)核對一個文件的讀寫操作會調(diào)用內(nèi)核提供的系統(tǒng)命令,返回一個文件描述符(file discriptor,簡稱fd)。
            描述符就是一個數(shù)字,它指向內(nèi)核中的一個結構體,這個結構體包含了文件路徑等信息。 eg:對socket的讀寫會返回一個描述符 socketfd
        2)一次?絡I/O的讀操作會包含下面這兩個階段:1)等待數(shù)據(jù)準備就緒 2)數(shù)據(jù)從內(nèi)核復制到用戶空間(即用戶進程)。


    1)阻塞I/O模型:blocking I/O
        概念:用戶進程從阻塞的socket中讀取數(shù)據(jù)時,只有當數(shù)據(jù)包到達該socket的接收緩存區(qū)且數(shù)據(jù)被復制到進程空間的緩存區(qū)中 或 發(fā)生錯誤時 才返回,在此期間進程會一直阻塞等待。

        說明:默認情況下,所有的文件操作都是阻塞的。
        缺點:客戶端的并發(fā)訪問量比較高時,服務端需要創(chuàng)建大量的線程來響應請求,當線程的數(shù)量膨脹后,系統(tǒng)的性能會急劇下降甚至宕機。

        偽異步I/O模型:
            概念:為了解決阻塞I/O模型中需要為每一個請求都創(chuàng)建一個線程的問題,服務端可以使用線程池來實現(xiàn)一個偽異步I/O模型。
            偽異步I/O模型可能導致的級聯(lián)故障:某臺服務器故障導致響應緩慢 -> 線程讀取故障服務節(jié)點的響應 -> 所有線程被故障節(jié)點阻塞,后續(xù)IO消息都在隊列中 -> 隊列積滿 -> 新的客戶端請求被拒絕,服務器無響應

    2)非阻塞I/O模型:nonblocking I/O
        概念:用戶進程從非阻塞的socket中讀取數(shù)據(jù)時,若該套接字的接收緩存區(qū)中沒有數(shù)據(jù),則內(nèi)核會直接返回一個錯誤。

        說明:一般當socket設為非阻塞狀態(tài)時,用戶進程會輪詢內(nèi)核(eg:循環(huán)調(diào)用recvfrom函數(shù)),直到內(nèi)核有數(shù)據(jù)返回為止,因此會導致大量cpu資源被占用。


    3)I/O復用模型:I/O multiplexing
        概念:將多個待監(jiān)聽的fd注冊到多路復用器(selector)中,注冊的時候需要指定該fd上待監(jiān)聽的事件,selector會一直監(jiān)聽注冊的fd,當fd上有事件發(fā)生時,selector會做出相應的處理。

        說明:
            與阻塞I/O模型相比,I/O復用模型是阻塞在select調(diào)用(或poll調(diào)用、或epoll調(diào)用)上,而不是阻塞在真正的I/O操作上。注意:阻塞是針對發(fā)起方而言的。
            獲取fd的狀態(tài):內(nèi)核把fd的信息通知給用戶空間。
            水平觸發(fā):若就緒的fd未被用戶進程處理,則該fd在下一次查詢時依舊會返回。
            邊緣觸發(fā):無論就緒的fd是否被用戶進程處理,該fd在下一次查詢時將不再返回。

        優(yōu)點:
            客戶端發(fā)起的連接操作是異步的,故單線程可以同時處理多個客戶端的IO請求。系統(tǒng)不需要為每個客戶端請求都創(chuàng)建一個線程,這樣大大降低了系統(tǒng)的開銷,
        缺點:


        select調(diào)用:
            概念:多路復用器(selector)由select函數(shù)實現(xiàn)。

            監(jiān)聽機制:
                輪詢注冊的fd,并根據(jù)fd的狀態(tài)做相應的處理:
                    讀就緒狀態(tài)             ->    讀數(shù)據(jù) 并 刪除該讀就緒事件
                    寫就緒狀態(tài)             ->    寫數(shù)據(jù) 并 刪除該寫就緒事件
                    接收(accept)就緒狀態(tài)     ->    注冊新的讀就緒事件 并 刪除該接收就緒事件
                    ...
                獲取fd的狀態(tài):內(nèi)核把所有監(jiān)聽的fd的信息整體復制到用戶空間。

            觸發(fā)方式:水平觸發(fā)。

            優(yōu)點:與非阻塞式I/O模式相比,select調(diào)用不需要客戶端不斷地發(fā)出請求。
            缺點:
                單個進程可以打開的fd數(shù)量有限,默認1024個,如果要修改這個默認值,需要重新編譯內(nèi)核。
                每次select調(diào)用都會線性地掃描所有監(jiān)聽的fd(即:無論fd是否就緒,select都會去檢查它的狀態(tài)),當監(jiān)聽的fd數(shù)量比較多時,I/O效率呈線性下降。

        poll調(diào)用:
            概念:多路復用器(selector)由poll函數(shù)實現(xiàn)。

            監(jiān)聽機制:同select調(diào)用。

            觸發(fā)方式:水平觸發(fā)。

            優(yōu)點:
                單個進程可以打開的fd數(shù)量不受限制。
            缺點:
                線性地掃描所有監(jiān)聽的fd,當監(jiān)聽的fd數(shù)量比較多時,I/O效率呈線性下降。

        epoll調(diào)用:
            概念:selector由一系列epoll_函數(shù)實現(xiàn)。

            監(jiān)聽機制:
                當fd就緒時,fd會立即回調(diào)rollback函數(shù)。而那些沒有就緒的fd則不會回調(diào)rollback函數(shù)。
                獲取fd的狀態(tài):使用內(nèi)存映射,不需要把fd的信息從內(nèi)核復制到用戶空間。

            觸發(fā)方式:默認是水平觸發(fā),支持邊緣觸發(fā)。

            優(yōu)點:
                單個進程可以打開的fd數(shù)量不受限制。(僅受限于操作系統(tǒng)的最大文件句柄數(shù),1g內(nèi)存的最大文件句柄數(shù)為10w左右)
                由于epoll采用的是回調(diào)函數(shù)的方式,而不是線性掃描的方式,故I/O效率不會隨著fd數(shù)量的增加而線性下降。
                使用內(nèi)存映射,避免了內(nèi)存復制的開銷,加速了內(nèi)核與用戶空間的消息傳遞。
            缺點:
                在連接數(shù)少并且連接都十分活躍的情況下,epoll的性能可能比select和poll的性能差,畢竟epoll的通知機制需要很多函數(shù)回調(diào)。


    4)信號驅(qū)動式I/O模型:SIGIO
        開啟套接字信號驅(qū)動IO功能,并通過sigaction系統(tǒng)調(diào)用,執(zhí)行一個信號處理函數(shù),當數(shù)據(jù)報準備好時,內(nèi)核就為該進程產(chǎn)生一個SIGIO信號,用戶進程收到這個信號后,就可以開始進行I/O操作了。
        該系統(tǒng)調(diào)用會立即返回,在等待數(shù)據(jù)報到達期間,用戶進程不會被阻塞。
        
        說明:信號驅(qū)動式I/O模型使用的場景比較少。


    5)異步I/O模型:POSIX定義的異步IO函數(shù)
        
        調(diào)用異步IO函數(shù),讓內(nèi)核在整個I/O操作(包括將數(shù)據(jù)從內(nèi)核復制到用戶自己的緩沖區(qū))完成后通知用戶進程。
        該系統(tǒng)調(diào)用會立即返回,在等待I/O操作期間,用戶進程不被阻塞。

        說明:同步/異步是針對執(zhí)行方而言的。      

感謝各位的閱讀,以上就是“怎么理解UNIX的網(wǎng)絡I/O模型”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對怎么理解UNIX的網(wǎng)絡I/O模型這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關知識點的文章,歡迎關注!

當前標題:怎么理解UNIX的網(wǎng)絡I/O模型
標題網(wǎng)址:http://m.rwnh.cn/article38/ipjspp.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護Google、靜態(tài)網(wǎng)站網(wǎng)站導航、網(wǎng)站內(nèi)鏈動態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設網(wǎng)站維護公司
枝江市| 大荔县| 旺苍县| 南郑县| 略阳县| 肇源县| 吴桥县| 吉木萨尔县| 仁化县| 克拉玛依市| 普兰县| 鸡泽县| 类乌齐县| 郧西县| 泰来县| 南丰县| 河津市| 济源市| 历史| 东阳市| 龙海市| 醴陵市| 宿松县| 义马市| 湛江市| 正安县| 许昌市| 平陆县| 禹城市| 鹤庆县| 甘南县| 沅江市| 兴和县| 西乡县| 襄汾县| 三穗县| 上虞市| 寿光市| 台中市| 大冶市| 龙井市|