協程是什么
- 協程是一種編程思想,并不局限于特定的語言。
- 協程是輕量級的線程,基于線程池API,通俗的來說,就是官方提供的線程框架。
- 協程的調度完全由用戶控制。
- 協程擁有自己的寄存器上下文和棧。
當我們在了解協程的時候,不可避免的會跟線程、進程作比較作分析,下面來貼個圖便于理解:
線程主要用于做耗時操作,所以協程也是用來處理耗時任務。實現順序編寫異步代碼,自動進行線程切換。
協程與線程的區別
- 一個線程可以多個協程,一個進程也可以單獨擁有多個協程。
- 線程、進程都是同步機制,而協程則是異步。
- 協程能保留上一次調用時的狀態,每次過程重入時,就相當于進入上一次調用的狀態。
- 線程是搶占式,而協程是非搶占式的,所以需要用戶自己釋放使用權來切換到其他協程,因此同一時間其實只有一個協程擁有運行權,相當于單線程的能力。
- 協程并不是取代線程, 而是抽象于線程之上。
- 線程是被分割的CPU資源, 協程是組織好的代碼流程, 協程需要線程來承載運行, 線程是協程的資源, 但協程不會直接使用線程。
- 協程直接利用的是執行器(Interceptor), 執行器可以關聯任意線程或線程池, 可以是當前線程、UI線程或新建線程。
協程的幾個關鍵點
- 能夠掛起和恢復
- 程序自己處理掛起和恢復
- 自己處理掛起和恢復操作實現協程的運