在同步IO中,線程啟動一個IO操作然后就立即進入等待狀態(tài),直到IO操作完成后才醒來繼續(xù)執(zhí)行。而異步IO方式中,線程發(fā)送一個IO請求到內(nèi)核,然后繼續(xù)處理其他的事情,內(nèi)核完成IO請求后,將會通知線程IO操作完成了。
如果IO請求需要大量時間執(zhí)行的話,異步IO方式可以顯著提高效率,因為在線程等待的這段時間內(nèi),CPU將會調(diào)度其他線程進行執(zhí)行,如果沒有其他線程需要執(zhí)行的話,這段時間將會浪費掉。
協(xié)程
協(xié)程(Coroutine),又稱微線程。
我們平常使用的函數(shù)又稱子程序,是層級調(diào)用的,即A函數(shù)調(diào)用B,B函數(shù)又調(diào)用C,那么需要等C執(zhí)行完畢返回,然后B程序執(zhí)行完畢返回,最后A執(zhí)行完畢。
協(xié)程看上去也是子程序,但是執(zhí)行順序和子程序不同:協(xié)程執(zhí)行過程可以中斷,同樣是A函數(shù)調(diào)用B,但B可以執(zhí)行一部分繼續(xù)去執(zhí)行A,然后繼續(xù)執(zhí)行B未執(zhí)行完的部分。
協(xié)程看起來很像多線程。但協(xié)程最大的優(yōu)勢是極高的執(zhí)行效率。因為線程需要互相切換,切