日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux下阻塞的系统调用,Linux下文件的阻塞与非阻塞对部分系统调用的影响

發布時間:2025/3/12 linux 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux下阻塞的系统调用,Linux下文件的阻塞与非阻塞对部分系统调用的影响 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.基本概念

所謂的阻塞,即內核在對文件操作I/O系統調用時,如果條件不滿足(可能需要產生I/O),則內核會將該進程掛起。非阻塞則是發現條件不滿足就會立即返回。此外需要注意的是非阻塞并不是輪詢,不然就和阻塞沒多大區別了,它只是調用不成功就直接返回了,不會在去看啥時候會滿足條件,而是有你自己去選擇接下來該咋辦,系統以不再負責

2.read/write阻塞與非阻塞的理解

read/write系統調用,并不會去直接讀寫文件,而只是去操作文件所對應的內存頁(此時的頁為虛擬內存),對于read如果在頁中找到了想要讀寫的數據,則直接從頁中將數據copy到用戶緩存即可,如果要讀的頁沒有找到,則只能從磁盤讀出該頁內容緩存在內存中即可。所謂的讀過程,其實文件系統所要做的只是鎖定頁面,然后構造一個讀請求,并將請求發給底層的IO子系統即可。linux內核中read系統調用默認是阻塞的write調用是非阻塞的,因為write時只是將用戶態的數據寫入緩存頁面中即可返回

3.對于網絡套接字阻塞/非阻塞對讀數據的影響

(1)在阻塞情況下

在阻塞條件下,read/recv/msgrcv的行為

1.如果沒有發現數據在網絡緩沖中會一直等

2.當發現有數據時會把數據讀到用戶指定的緩存區中(如果讀到的數據比指定的大小小,read此時并不會阻塞,而是會立即返回)

應為read的原則是在不超過指定長度的時候有多少讀多少,沒有數據就返回。所以一般情況下,如果我們想要讀取我們想要的字節量,就得循環read

(2)在非阻塞情況下

在非阻塞情況下read的行為

1.如果發現沒有數據就直接返回

2.如果發現有數據,那么也是采用有多少就讀多少,所以read完之后需要判斷是否再次進行read操作,以讀到我們想要的字節數

對于讀的阻塞與非阻塞區別就在于沒有數據可讀時,是否立即返回

4.對于網絡套接字阻塞/非阻塞對寫數據的影響

寫的操作本質也不是進行發送操作,而是把用戶態的數據copy到系統底層去,然后由系統幫忙發送。send,write返回成功,只表明數據已經copy到底層緩沖,而并不表明數據以發送出去,更不能表示對方端口已經接收到數據

(1)阻塞情況下

write會將數據發完之后才返回,這里與讀不同。當我們讀數據的時候,我們并不知道發送端是否還有數據要發,如果一直等待就可能造成死循環,所以為了避免這類事情發生,我們把當前緩存中的內容讀完,就返回了,并不關心是否讀夠了我們想要讀的字節數。而write,由于需要寫的長度是知道的,所以它會一直寫夠指定的字節才返回

(2)非阻塞情況下

非阻塞情況下,是采用可以寫多少就寫多少的策略,與讀不一樣的地方在于,有多少讀多少是由網絡發送端是否有數據傳輸到為標準。但是對于寫多少是由本地網絡堵塞情況為標準的,對于非阻塞的情況就是一次寫多少算多少,有可能會造成部分寫入

總結

以上是生活随笔為你收集整理的linux下阻塞的系统调用,Linux下文件的阻塞与非阻塞对部分系统调用的影响的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。