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