IO

copy form https://blog.csdn.net/lisonglisonglisong/article/details/51944671

兩個階段:

  1. 等待數(shù)據(jù)
  2. 數(shù)據(jù)從內(nèi)核態(tài)復(fù)制到用戶態(tài)

1. 阻塞式IO

階段1與階段2都阻塞


image.png

2. 非阻塞式IO

依然會在階段2阻塞


image.png

3. IO多路復(fù)用(事件驅(qū)動IO)

依然會在階段2阻塞


image.png

4. 信號驅(qū)動式IO

image.png

5. 異步IO

image.png

五種IO模型比較

1-4 都是階段2阻塞


image.png

阻塞/非阻塞

阻塞I/O會一直阻塞用戶進程直到操作完成
非阻塞I/O在內(nèi)核的數(shù)據(jù)還沒準(zhǔn)備好的情況下會立即返回

同步/異步

POSIX是這樣定義的:

A synchronous I/O operation causes the requesting process to be blocked until that I/O operation completes. —— 同步IO操作導(dǎo)致進程阻塞,直到IO操作完成。
An asynchronous I/O operation does not cause the requesting process to be blocked. —— 異步IO操作不導(dǎo)致進程阻塞。

上面定義中的I/O operation是指真正的I/O系統(tǒng)調(diào)用,比如recvfrom,所以阻塞式I/O模型、非阻塞式I/O模型、I/O復(fù)用模型、信號驅(qū)動式I/O模型都屬于同步I/O。
只有異步I/O模型屬于POSIX定義的異步I/O,因為在異步I/O模型中,用戶進程是將整個I/O操作都交給內(nèi)核來完成,內(nèi)核完成后發(fā)信號通知,在此期間用戶進程完全不用去理會。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容