(五)协程 Coroutine

作者: onestravel | 来源:发表于2018-12-13 15:32 被阅读0次

    一、协程的概念

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

        本文链接:https://www.haomeiwen.com/subject/eycbhqtx.html