大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 5種Linux 網絡I/O模型解析

5種Linux 網絡I/O模型解析

更新時間:2020-12-21 17:49:05 來源:動力節點 瀏覽1419次

在實際應用中,數據操作通常分為輸入和輸出,那么以輸入為例,在操作系統中,一個數據的輸入通常分為兩個過程:等待數據準備好和將準備好的數據從內核拷貝到用戶空間。我們先來看看5種Linux網絡I/O模型分別是什么?

1.阻塞I/O

2.非阻塞I/O

3.I/O多路復用

4.信號驅動I/O

5.異步I/O

下面我們來具體分析這5種Linux網絡I/O模型:

1、阻塞IO模型

學習過操作系統的知識后,可以知道:不管是網絡IO還是磁盤IO,對于讀操作而言,都是等到網絡的某個數據分組到達后/數據準備好后,將數據拷貝到內核空間的緩沖區中,再從內核空間拷貝到用戶空間的緩沖區。
此處需要一個清新的腦回路,我就是程序,我想要全家桶,于是發起了系統調用,而后廚加工的過程就是在做數據準備和拷貝工作。全家桶最終到手,數據終于從內核空間拷貝到了用戶空間。

阻塞IO的執行過程是進程進行系統調用,等待內核將數據準備好并復制到用戶態緩沖區后,進程放棄使用CPU并一直阻塞在此,直到數據準備好。


2、非阻塞IO模型

同步阻塞 I/O 的一種效率稍低的變種是非阻塞 I/O。在這種模型中,設備是以非阻塞的形式打開的。這意味著 I/O 操作不會立即完成,read操作可能會返回一個錯誤代碼,說明這個命令不能立即滿足(EAGAIN 或 EWOULDBLOCK)

 

每次應用程序詢問內核是否有數據準備好。如果就緒,就進行拷貝操作;如果未就緒,就不阻塞程序,內核直接返回未就緒的返回值,等待用戶程序下一個輪詢。

非阻塞IO模型

大致經歷兩個階段:

等待數據階段:未阻塞, 用戶進程需要盲等,不停的去輪詢內核。

數據復制階段:阻塞,此時進行數據復制。

在這兩個階段中,用戶進程只有在數據復制階段被阻塞了,而等待數據階段沒有阻塞,但是用戶進程需要盲等,不停地輪詢內核,看數據是否準備好。

 

3.IO多路復用模型

I/O 復用有時又被稱為 事件驅動 I/O, 它的最大優勢在于,我們可以將感興趣的多個I/O事件(更精確的說,應該是 I/O 所對應的文件描述符)注冊到 select/poll/epoll/kqueue 之中某一個系統調用上(很多時候,這些系統調用又被稱為多路復用器。假設此時我們選擇了 select() )。此后,調用進程會阻塞在 select() 系統調用之上(而不是阻塞在真正的 I/O 系統調用(如 read(), write() 等)上)。select() 會負責監視所有已注冊的 I/O 事件,一旦有任意一個事件的數據準備好,那么 select() 會立即返回,此時我們的用戶進程便能夠進行數據的復制操作。

 

總而言之,I/O 復用的優點就在于可以同時等待多個I/O事件;而缺點是會進行兩次系統調用(一次 select(), 一次 read() )。

 

4.信號驅動IO模型

在這種模型下,我們首先開啟套接字的信號驅動式I/O功能,并通過sigaction系統調用安裝一個信號處理函數。改系統調用將立即返回,我們的進程繼續工作,也就是說他沒有被阻塞。當數據報準備好讀取時,內核就為該進程產生一個SIGIO信號。我們隨后就可以在信號處理函數中調用read讀取數據報,并通知主循環數據已經準備好待處理,也可以立即通知主循環,讓它讀取數據報。當數據報準備好的時候,內核會向應用程序發送一個信號,進程對信號進行捕捉,并且調用信號處理函數來獲取數據報。


5.異步IO模型

 異步 I/O 模型是一種處理與 I/O 重疊進行的模型。讀請求會立即返回,說明 read 請求已經成功發起了。在后臺完成讀操作時,應用程序然后會執行其他處理操作。當 read 的響應到達時,就會產生一個信號或執行一個基于線程的回調函數來完成這次 I/O 處理過程。 

異步I/O執行的兩個階段都不會阻塞讀寫操作,由內核完成。完成后內核將數據放到指定的緩沖區,通知應用程序來取。

 

通過以上的介紹,我想大家5種Linux網絡I/O模型有了一定的了解和認識,而且也了解到了5種Linux網絡I/O模型每種模型的優缺點,Linux同步 I/O 總會有阻塞的過程,這就是“同步”最本質的特征。而Linux異步 I/O 的最大特點在于用戶進程均不阻塞。用戶進程告知內核啟動某一 I/O 操作, 并讓內核全權代為執行(包括等待數據及拷貝數據至用戶空間),此后用戶進程可以立即執行其它的任何操作。等到所有 I/O 過程執行完成后, 內核會通知用戶進程。由此可見,在整個過程中,用戶進程均不阻塞。讓我們攜手本站的Linux教程,更加透徹的學習Linux中的各種知識吧!


提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 一本色道久久88加勒比—综合 | 亚洲小视频在线播放 | 欧美国产综合日韩一区二区 | 久久国产欧美日韩高清专区 | 国产精品香蕉在线一区二区 | 第一福利在线视频 | 亚洲综合色吧 | 亚洲欧美中文字幕高清在线一 | 狠狠干欧美 | 欧美干干 | 欧美视频一级 | 91成年人视频 | 久久久噜久噜久久综合 | 亚洲成人综合在线 | 亚洲精品天堂一区二区三区 | 亚洲一区二区三区在线网站 | 手机在线精品视频 | 日本三级做a全过程在线观看 | 99久热国产精品视频尤物不卡 | 中文字幕一区二区在线观看 | 天天久久狠狠伊人第一麻豆 | 中文字幕一区二区在线观看 | 九九热精品视频在线 | 九九热国产在线 | 99久久久精品免费观看国产 | 九九在线偷拍视频在线播放 | 亚洲va欧美va国产va天堂影 | 欧洲自拍偷拍 | 偷拍肉窝窝视频在线播放 | 夜夜天堂 | 黄色成人在线播放 | 久久久久久久久久久福利观看 | 成人国产午夜在线视频 | 亚洲日本va中文字幕区 | 伊人午夜| 精品久久久一二三区 | 天天操夜夜操美女 | 国产大片在线观看 | 看毛片网 | 天天干视频网站 | 国产精品美女一区二区 |