相對(duì)于同步IO,異步IO不是順序執(zhí)行。用戶進(jìn)程進(jìn)行aio_read系統(tǒng)調(diào)用之后,無(wú)論內(nèi)核數(shù)據(jù)是否準(zhǔn)備好,都會(huì)直接返回給用戶進(jìn)程,然后用戶態(tài)進(jìn)程可以去做別的事情。等到socket數(shù)據(jù)準(zhǔn)備好了,內(nèi)核直接復(fù)制數(shù)據(jù)給進(jìn)程,然后從內(nèi)核向進(jìn)程發(fā)送通知。IO兩個(gè)階段,進(jìn)程都是非阻塞的。
舉例理解
你早上去買(mǎi)現(xiàn)炸油條, 不用去排隊(duì)了,打開(kāi)美團(tuán)外賣(mài)下單,然后做其它事,一會(huì)外賣(mài)自己送上門(mén)。(你就是應(yīng)用級(jí)別,店家就是操作系統(tǒng)級(jí)別, 應(yīng)用無(wú)需阻塞,這就是非阻塞;系統(tǒng)還可能在處理中,但是立刻響應(yīng)了應(yīng)用,這就是異步)
Linux 中IO圖例
(Linux提供了AIO庫(kù)函數(shù)實(shí)現(xiàn)異步,但是用的很少。目前有很多開(kāi)源的異步IO庫(kù),例如libevent、libev、libuv)