協(xié)程簡單理解

帶著以下幾個問題去簡單理解協(xié)程原理。
1.協(xié)程到底是怎么創(chuàng)建和啟動的?
簡略版可參考這篇:
Kotlin協(xié)程createCoroutine和startCoroutine原理
詳細版可參考《深入理解Kotlin協(xié)程》第三章。
2.協(xié)程是如何描述的?
協(xié)程是通過Job去描述的。
基本上每啟動一個協(xié)程就會產(chǎn)生對應(yīng)的Job。
它提供了六種狀態(tài)來表示協(xié)程的運行狀態(tài)。

New: 創(chuàng)建
Active: 運行
Completing: 已經(jīng)完成等待自身的子協(xié)程
Completed: 完成
Cancelling: 正在進行取消或者失敗
Cancelled: 取消或失敗

詳細版可參考《深入理解Kotlin協(xié)程》第五章第二節(jié)。

參考鏈接:
Kotlin協(xié)程實現(xiàn)原理:CoroutineScope&Job
3.協(xié)程是如何與線程關(guān)聯(lián)的?
可參考這篇:
Kotlin協(xié)程之Dispatchers原理
簡單總結(jié):

https://zhuanlan.zhihu.com/p/549348531
Dispatchers是協(xié)程框架中與線程交互的關(guān)鍵。底層會有不同的線程池,Dispatchers.Default、IO,協(xié)程任務(wù)來了的時候會封裝成一個個的Runnable,丟到線程中執(zhí)行,這些Runnable的run方法中執(zhí)行的其實就是continuation.resume,也就是launch的Lambda生成的SuspendLambda匿名內(nèi)部類,也就是開啟協(xié)程狀態(tài)機,開始協(xié)程的真正執(zhí)行。

4.協(xié)程是怎么切換線程的?
簡單總結(jié):CoroutineContext 里存放著協(xié)程的分發(fā)器。CoroutineDispatcher決定了運行在哪個線程上。
詳細可參考這幾篇:
Kotlin 協(xié)程源碼解析
Kotlin 協(xié)程調(diào)度切換線程是時候解開真相了

5.協(xié)程執(zhí)行、掛起、恢復(fù)的流程

https://juejin.cn/post/7111246680338464804#heading-6
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容