為什麼書上說同步非阻塞io在對磁碟io上不起作用?

時間 2021-05-31 12:33:48

1樓:沈萬馬

概念上的事情別人都說的很好了。

技術細節上說,傳統的硬碟概念沒有提供輪詢傳輸狀態的介面。不像網路裝置設計之初就考慮到延遲的大變動範圍和不確定性,於是設計上就提供了帶狀態檢測的非同步操作方式;硬碟作為乙個自始至終都是「寫不完就不行」的裝置,非同步操作介面是在最近幾年才真正做到硬體介面裡的。

因為一直以來硬碟都是唯一可靠的持久本地儲存,需要寫入的資料如果不能寫入意味著災難性的後果。所以即便是現代作業系統,也並不輕易允許磁碟IO的純非同步化。具體實現上不能說是同步的,但也不是可檢測的非同步,阻塞性也不是題主問題裡的定義那麼單純,就不展開了因為涉及太多細節。

2樓:

因為POSIX標準就是這麼規定的,普通檔案的file descriptor就算你設定了nonblock, read/write也必須block。

Rob Pike說過,假如你連這都不知道,就沒資格使用Go語言。

3樓:靈劍

同步非阻塞其實是兩個過程,首先等待就緒,然後同步複製。等待就緒也就是等待緩衝區內有資料(或者傳送緩衝區有空餘位置)。而磁碟檔案(也就是regular file)是沒有就緒這過程的,它們隨時是就緒的,至少模型上是這樣,因此不適用同步非阻塞。

4樓:陳碩

書上說non-blocking適用於網路io但是對硬碟io不起作用,這是對的,但沒有說原因。

你認為原因是「網路io可以採用cpu輪詢的方式不斷檢視是否來資料了,但是磁碟一直在複製傳輸」,這是你的理解,是錯的。

請問在基本的同步非阻塞IO模型中,使用者程序能在輪詢的間隔中做些什麼?

子者陽生之初 所以非阻塞IO不一定比阻塞IO效率高,這也是為什麼阻塞IO仍然存在的原因。很多教程沒有指出非阻塞IO適用的應用場景,只是泛泛地說在IO操作期間程式可以幹別的事。可問題就在於如果程式的下一步需要該IO結果,不論你阻不阻塞我都得等結果出來以後再執行下一步。所以關鍵在於指出非阻塞IO的應用場...

二階段提交 為什麼會同步阻塞?

曉楚 也就是說,各個參與者在等待其它參與者節點的響應過程中,將無法進行任何其他操作。這裡,參與者並不是指一台機器,甚至不是指當前這個執行緒。往淺了說,參與者傳送 prepare 命令後,這個執行緒可以被掛起,系統繼續做別的事情。深一點點說,另外乙個完全不相干的事務 no data dependenc...

為什麼佛法說金銀戒和戒貪嗔痴,但書上說極樂世界又是金銀遍地?

人們都恐懼死亡,許諾死後的幸福生活,才能吸引更多的信徒啊。為此吃設定又算得了什麼?又不是一次兩次了 時,彼赤馬天子白佛言 世尊,頗有能行過世界邊,至不生 不老 不死處不?佛告赤馬 無有能過世界邊,至不生 不老 不死處者。雜阿含經 又舍利弗。彼佛壽命,及其人民,無量無邊阿僧只劫,故名阿彌陀。阿彌陀經 ...