在同步IO中,線程啟動(dòng)一個(gè)IO操作然后就立即進(jìn)入等待狀態(tài),直到IO操作完成后才醒來(lái)繼續(xù)執(zhí)行。而異步IO方式中,線程發(fā)送一個(gè)IO請(qǐng)求到內(nèi)核,然后繼續(xù)處理其他的事情,內(nèi)核完成IO請(qǐng)求后,將會(huì)通知線程IO操作完成了。

如果IO請(qǐng)求需要大量時(shí)間執(zhí)行的話,異步IO方式可以顯著提高效率,因?yàn)樵诰€程等待的這段時(shí)間內(nèi),CPU將會(huì)調(diào)度其他線程進(jìn)行執(zhí)行,如果沒(méi)有其他線程需要執(zhí)行的話,這段時(shí)間將會(huì)浪費(fèi)掉。

協(xié)程

協(xié)程(Coroutine),又稱(chēng)微線程。

我們平常使用的函數(shù)又稱(chēng)子程序,是層級(jí)調(diào)用的,即A函數(shù)調(diào)用B,B函數(shù)又調(diào)用C,那么需要等C執(zhí)行完畢返回,然后B程序執(zhí)行完畢返回,最后A執(zhí)行完畢。

協(xié)程看上去也是子程序,但是執(zhí)行順序和子程序不同:協(xié)程執(zhí)行過(guò)程可以中斷,同樣是A函數(shù)調(diào)用B,但B可以執(zhí)行一部分繼續(xù)去執(zhí)行A,然后繼續(xù)執(zhí)行B未執(zhí)行完的部分。

協(xié)程看起來(lái)很像多線程。但協(xié)程最大的優(yōu)勢(shì)是極高的執(zhí)行效率。因?yàn)榫€程需要互相切換,切