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