ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

第088篇 协程入门:suspend 到底挂起了谁

第088篇 协程入门:suspend 到底挂起了谁 协程这题的基础门槛不高——launch、async、suspend谁都会写。真正区分开的是"挂起"这件事到底挂起了什么:挂起的是协程(一个轻量状态机),不是线程;线程在挂起期间是空闲可复用的。这个认知一旦建立,协程的所有设计就都说得通了。这篇按"是什么 → 怎么执行 → 怎么落地"三步讲。先把结论放在前面:协程是用户态的轻量并发单元,本质是一个被编译器改写为状态机的suspend函数。suspend函数被编译成(Object continuation, int flags) - Object这样的方法签名——参数里多了 continuation,返回值是Object(协程挂起时是COROUTINE_SUSPENDED)。这解释了协程为什么"挂起不占线程":线程执行到挂起点就返回,把 CPU 让给别人,恢复时再进来。机制拆解launch返回Job(只管生命周期,不返回值)、async返回DeferredT(是Job的子类,能await()拿结果)、run是普通函数写法。三个"启动"函数的差别只在返回值类型,取消与异常传播的规则完全一致/
返回列表