(五)协程 Coroutine

温馨提示

写博客是为了记录在开发过程中所涉及到的技术以及遇到的问题的解决,如果该博客对您有所帮助,希望可以点个关注/喜欢;如果您对文章中的内容有什么不同的见解,欢迎留言进行讨论。谢谢!

一、协程的概念

  • 协作程序,解决异步问题
  • 应用层完成调度
  • 常见的支持协程的语言如: 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 支持

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

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

你可能感兴趣的:((五)协程 Coroutine)