應(yīng)用進(jìn)程使用 sigaction 系統(tǒng)調(diào)用,內(nèi)核立即返回,應(yīng)用進(jìn)程可以繼續(xù)執(zhí)行,也就是說(shuō)等待數(shù)據(jù)階段應(yīng)用進(jìn)程是非阻塞的。內(nèi)核在數(shù)據(jù)到達(dá)時(shí)向應(yīng)用進(jìn)程發(fā)送 SIGIO 信號(hào),應(yīng)用進(jìn)程收到之后在信號(hào)處理程序中調(diào)用 recvfrom 將數(shù)據(jù)從內(nèi)核復(fù)制到應(yīng)用進(jìn)程中。
相比于非阻塞式 I/O 的輪詢方式,信號(hào)驅(qū)動(dòng) I/O 的 CPU 利用率更高。
舉例理解
你早上去買(mǎi)現(xiàn)炸油條,門(mén)口排隊(duì)的人多,現(xiàn)在引入了一個(gè)叫號(hào)系統(tǒng),點(diǎn)完單后你就可以做自己的事情了,然后等叫號(hào)就去拿就可以了。(所以不用再去自己頻繁跑去問(wèn)有沒(méi)有做好了)
Linux 中IO圖例