IO的過(guò)程
一次IO都會(huì)有兩個(gè)階段:
? 等待數(shù)據(jù),即數(shù)據(jù)從磁盤(pán)到內(nèi)核內(nèi)存.
? 復(fù)制數(shù)據(jù),即數(shù)據(jù)從內(nèi)核內(nèi)存到進(jìn)程內(nèi)存.
5種IO模型
阻塞型 # 阻塞/非阻塞,關(guān)注的是調(diào)用結(jié)果返回前調(diào)用者的狀態(tài)
非阻塞型
復(fù)用型
信號(hào)驅(qū)動(dòng)型
異步
阻塞型(block): .
調(diào)用結(jié)果返回之前,IO的兩個(gè)階段調(diào)用者被“掛”起.比如你去釣魚(yú),只是一直等著看,只到魚(yú)上鉤才處理.
非阻塞型(noblock)
調(diào)用結(jié)果返回之前,調(diào)用者不會(huì)被“掛”起轴猎。即IO第一階段調(diào)用者是不會(huì)被阻塞的,但也是處于“盲”等待即無(wú)目的地等待(所以效率上未必強(qiáng)于阻塞型),只在第二階段會(huì)被阻塞.比如你去釣魚(yú),放下魚(yú)鉤后你就在一旁玩手機(jī)或看書(shū),只是偶爾才過(guò)去看一看魚(yú)有沒(méi)有上鉤.
同步(sync)
調(diào)用者等待對(duì)方(被調(diào)用者 )返回消息
異步(async)
被調(diào)用者通過(guò)狀態(tài)、通知或回調(diào)機(jī)制通知調(diào)用者被調(diào)用者的運(yùn)行狀態(tài)
復(fù)用型(多路輸出)
select() 1024個(gè)限制 BSD
poll() sysv