[toc]
3. 协程的整个配套体系
3.1 启动流程
说明:
SuspendLambda 是协程体类对象,封装协程体的操作
继承关系
SuspendLambda –> ContinuationImpl –> BaseContinuationImpl
①
1 | public actual fun <R, T> (suspend R.() -> T).createCoroutineUnintercepted( |
反编译的代码
1 | public static final void main(@NotNull String[] args) { |
② CoroutineScheduler 是个线程池
BaseContinuationImpl 的 resumeWith() 会调用 invokeSuspend() 函数, invokeSuspend() 会调用生成协程体的 invokeSuspend()
3.2 协程体系
根据个人的理解将整个协程体系分为 Core, 调度部分,管理协程生命周期,启动模式四部分,这样的划分不一定正确,只是为了更加方便理解协程而划分的。
1 | internal abstract class BaseContinuationImpl( |
3.3 async / await
使用 async 可以让 supend 函数并发执行,减少整个函数的执行时间
3.5 挂起和恢复
挂起的本质是切线程,并且在相应的逻辑处理完成之后再重新切回线程。
挂起函数内执行挂起操作的时候会返回 coroutine_suspended 标志,结束协程体的运行,使协程挂起。