一、协程的概念
- 协作程序,解决异步问题
- 应用层完成调度
- 常见的支持协程的语言如: lua,C#
二、协程要解决什么问题
例如:
现在要开始协程啦{
//现在在协程里面了
//花括号内的代码可以是一段运行在UI线程的代码
val view = ... //初始化视图
val image = //异步加载图片,运行在其他子线程,执行到这一步就挂起,等到子线程返回图片,继续执行,不会阻塞线程
view.setImage(image)
}
- 异步代码想同步代码一样直观
- 简化异步代码异常处理
- 轻量级的并发方案
三、kotlin如何支持协程
- 编译器对 suspend 函数的编译支持
- 标准库的基本API支持
- kotlinx.coroutine 应用级的支持
四、协程的基本API
- createCoroutine:创建协程
- startCoroutine:启动协程
- suspendCoroutine:挂起协程
- Continuation 接口:运行控制类,负责结果和异常的返回
- CoroutineContext 接口:运行上下文,资源持有,运行调度
- ContinuationInterceptor 接口:协程控制拦截器,可用来处理协程调度
五、协程的执行流程
- 协程被编译成状态机
-
suspend 函数即状态转移
image.png
六、协程的运行结果
- 正常的结果通过 resume 返回
-
异常通过 resumeWithException 抛出
image.png
七、kotlinx.coroutine 框架介绍
- Kotlin 官方协程应用框架
- 提供大量对协程API的封装
主要模块 | 说明 |
---|---|
kotlin-coroutines-core | 核心库 |
kotlin-coroutines-jdk8 | Java8 支持库 |
kotlin-coroutines-nio | 异步IO库 |
kotlin-coroutines-reactive | Reactive Streams 支持 |
kotlin-coroutines-reactor | Reactor 支持 |
kotlin-coroutines-rx1 | RxJava 1.x 支持 |
kotlin-coroutines-rx2 | RxJava 2.x 支持 |
kotlin-coroutines-android | Android UI 支持 |
kotlin-coroutines-javafx | JavaFx UI 支持 |
kotlin-coroutines-swing | Swing UI 支持 |
网友评论