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