unix系統(tǒng)下常見的五種IO模型
- 阻塞式
- 非阻塞式
- IO復(fù)用(select,poll)
- 信號(hào)驅(qū)動(dòng)(SIGIO)
- 異步調(diào)用(POSIX的aio系列函數(shù))
一個(gè)輸入操作通常具有兩個(gè)不同的階段
- 等待數(shù)據(jù)準(zhǔn)備好
- 從內(nèi)核將數(shù)據(jù)復(fù)制到進(jìn)程
對(duì)于一個(gè)網(wǎng)絡(luò)套接字上的輸入操作:
1)等待數(shù)據(jù)從網(wǎng)絡(luò)中到達(dá) 。
2)將內(nèi)核緩沖區(qū)的數(shù)據(jù)復(fù)制到進(jìn)程中
五種IO模型簡(jiǎn)介
1. 阻塞式
阻塞式(截取UNIX網(wǎng)絡(luò)編程卷1)
2. 非阻塞式
非阻塞式(截取UNIX網(wǎng)絡(luò)編程卷1)
應(yīng)用進(jìn)程反復(fù)輪詢內(nèi)核,查看操作是否就緒母截,這樣做往往消耗大量的cpu時(shí)間
3. 信號(hào)驅(qū)動(dòng)
信號(hào)驅(qū)動(dòng)(截取UNIX網(wǎng)絡(luò)編程卷1)
4. 多路復(fù)用
多路復(fù)用(截取UNIX網(wǎng)絡(luò)編程卷1)
- 阻塞在select操作本昏,監(jiān)聽一組文件描述符,當(dāng)某個(gè)就緒的時(shí)候就通知用戶,優(yōu)勢(shì)在于可以監(jiān)聽多個(gè)描述符
- 多線程中也有類似的模型,不過不是使用select監(jiān)聽一組描述符,而是使用多個(gè)線程(一個(gè)描述符對(duì)應(yīng)一個(gè)線程)颇象,這樣每個(gè)線程都可以自由調(diào)用recvfrom之類的阻塞式IO操作了。
5. 異步
異步(截取UNIX網(wǎng)絡(luò)編程卷1)
五種IO模型的對(duì)比
-
阻塞與非阻塞的區(qū)別在于第二階段并徘,將數(shù)據(jù)從內(nèi)核區(qū)域復(fù)制到用戶空間的時(shí)候是否阻塞
五種IO模型的比較(截取UNIX網(wǎng)絡(luò)編程卷1)
可見:前四種模型都是同步IO遣钳,因?yàn)檎嬲腎O操作(recvfrom)將阻塞進(jìn)程,只有最后一種才是異步IO