大战熟女丰满人妻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中的各種知識吧!


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

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 性做久久久久久免费观看 | 欧美日韩久久毛片 | 四虎永久免费地址ww417 | 久草视频在线资源 | 免费黄色毛片视频 | 依人综合网 | 夜夜操夜夜 | 国产乱码精品一区二区三区卡 | 人人爰人人人人人鲁 | aⅴ免费在线观看 | 久久线看观看精品香蕉国产 | 黄毛片免费 | 免费h片| 站长推荐国产午夜免费视频 | 欧美一区二区三区在线观看 | 国内精品视频在线播放一区 | 久久精品伦理 | 欧洲亚洲视频 | 午夜影院操一 | 夜夜女人国产香蕉久久精品 | 国产精品美女自在线观看免费 | 女性一级全黄生活片在线播放 | 理论片在线观看视频 | 7777奇米| 免费可以直接观看的毛片 | 黄a毛片| 四虎免费永久在线播放 | 九九精品视频一区在线 | 精品久久久日韩精品成人 | 97在线视频免费播放 | 久久精品a | 极品俄罗斯性孕妇孕交 | 天天操天天干天天插 | 天天爱天天色 | 人人爽天天爽 | 四虎影视国产在线观看精品 | 日本香蕉视频在线观看 | 国产成人综合网亚洲欧美在线 | 夜夜躁狠狠躁日日躁视频 | 四虎色影院 | 成人欧美一区二区三区视频 |