(五)协程 Coroutine

舒适提示

写博客是为了记录在开发过程当中所涉及到的技术以及遇到的问题的解决,若是该博客对您有所帮助,但愿能够点个关注;若是您对文章中的内容有什么不一样的看法,欢迎留言进行讨论。谢谢!java

1、协程的概念

  • 协做程序,解决异步问题
  • 应用层完成调度
  • 常见的支持协程的语言如: lua,C#

2、协程要解决什么问题

例如:react

如今要开始协程啦{
    //如今在协程里面了
    //花括号内的代码能够是一段运行在UI线程的代码
    val view = ...  //初始化视图
    val image =    //异步加载图片,运行在其余子线程,执行到这一步就挂起,等到子线程返回图片,继续执行,不会阻塞线程
    view.setImage(image)
}
  • 异步代码想同步代码同样直观
  • 简化异步代码异常处理
  • 轻量级的并发方案

3、kotlin如何支持协程

  • 编译器对 suspend 函数的编译支持
  • 标准库的基本API支持
  • kotlinx.coroutine 应用级的支持

4、协程的基本API

  • createCoroutine:建立协程
  • startCoroutine:启动协程
  • suspendCoroutine:挂起协程
  • Continuation 接口:运行控制类,负责结果和异常的返回
  • CoroutineContext 接口:运行上下文,资源持有,运行调度
  • ContinuationInterceptor 接口:协程控制拦截器,可用来处理协程调度

5、协程的执行流程

  • 协程被编译成状态机
  • suspend 函数即状态转移
    协程的执行流程

6、协程的运行结果

  • 正常的结果经过 resume 返回
  • 异常经过 resumeWithException 抛出
    协程的运行结果

7、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 支持

上一篇:(四)Kotlin 领域特定语言 DSL

下一篇:(六)Kotlin 与 Java 混合开发