2012-03-28 38 views

回答

2

在任何I/O操作中,都需要訪問硬盤(或其他慢速I/O設備)和後端。 「阻塞」呼叫只是在往返I/O完成時等待的同時,您的。所以,就像你可以等待閱讀完成一樣,你也可以等待寫作。

這對於傳統應用程序通常不那麼有用 - 您想告訴操作系統寫入您的數據,那麼它就不再是您的問題了。當您試圖保證存儲在I/O設備(例如硬盤)上的數據完整性時,例如在關係數據庫系統中,這就成爲您的問題。 (請注意,阻止並不是唯一可以保證寫入操作完成的方法。另請注意,隨着計算機日益複雜,有多層緩存可能會影響或可能不會影響實際阻止。)

+0

在UNIX的意義上,磁盤文件不會執行* block * - 它們被認爲是「快速」,這意味着進程進入磁盤等待狀態而不是睡眠。 'epoll()'總是會爲磁盤文件報告POLLOUT(和'POLLIN')。 – caf 2012-03-29 11:34:42

3

如果您以比另一方讀取的速度快的速度寫入管道,套接字或終端設備,最終會填滿相關的內核緩衝區,隨後的寫入操作將阻塞,直到某些數據被讀取另一邊。