線程和協(xié)程的區(qū)別及應(yīng)用場景?
1.線程和進(jìn)程:
線程是屬于進(jìn)程的,線程運行在進(jìn)程空間內(nèi),同一進(jìn)程所產(chǎn)生的線程共享同一內(nèi)存空間,當(dāng)進(jìn)程退出時該進(jìn)程所產(chǎn)生的線程都會被強(qiáng)制退出并清除。線程可與屬于同一進(jìn)程的其它線程共享進(jìn)程所擁有的全部資源,但是其本身基本上不擁有系統(tǒng)資源,只擁有一點在運行中必不可少的信息(如程序計數(shù)器、一組寄存器和棧)。
2.線程、進(jìn)程與協(xié)程:
線程和進(jìn)程的操作是由程序觸發(fā)系統(tǒng)接口,最后的執(zhí)行者是系統(tǒng);協(xié)程的操作則是程序員
協(xié)程存在的意義:對于多線程應(yīng)用,CPU通過切片的方式來切換線程間的執(zhí)行,線程切換時需要耗時(保持狀態(tài),下次繼續(xù))。協(xié)程,則只使用一個線程,在一個線程中規(guī)定某個代碼塊執(zhí)行順序。
協(xié)程的適用場景: 當(dāng)程序中存在大量不需要CPU的操作時(IO),適用于協(xié)程;