中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么理解UNIX的網絡I/O模型

發布時間:2021-11-15 16:31:14 來源:億速云 閱讀:137 作者:iii 欄目:大數據

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

UNIX的網絡I/O模型:

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


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

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

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

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

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


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

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

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


        select調用:
            概念:多路復用器(selector)由select函數實現。

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

            觸發方式:水平觸發。

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

        poll調用:
            概念:多路復用器(selector)由poll函數實現。

            監聽機制:同select調用。

            觸發方式:水平觸發。

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

        epoll調用:
            概念:selector由一系列epoll_函數實現。

            監聽機制:
                當fd就緒時,fd會立即回調rollback函數。而那些沒有就緒的fd則不會回調rollback函數。
                獲取fd的狀態:使用內存映射,不需要把fd的信息從內核復制到用戶空間。

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

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


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


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

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

感謝各位的閱讀,以上就是“怎么理解UNIX的網絡I/O模型”的內容了,經過本文的學習后,相信大家對怎么理解UNIX的網絡I/O模型這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

台东市| 建宁县| 定兴县| 措美县| 枣庄市| 苍溪县| 通榆县| 崇文区| 慈溪市| 峡江县| 武陟县| 衡东县| 周宁县| 汤原县| 卢龙县| 承德市| 疏勒县| 江口县| 宜丰县| 汾西县| 汉中市| 安远县| 涿鹿县| 屯昌县| 五大连池市| 屏东市| 清流县| 扎囊县| 新闻| 徐州市| 大理市| 万荣县| 青川县| 安多县| 乌拉特后旗| 天门市| 仁布县| 马龙县| 八宿县| 城固县| 阆中市|