Kotlin协程原理

前言 Java 19 引入了Virtual Threads并Preview,这个便是协程,对于它的实现原理还未做了解,理论上应该为此在JVM层面会有一些Support,但也有一个疑惑,就是在此之前,不少JVM语言已经有协程了,它们是如何在API层面来实现这个的呢(似乎JVM不支持这个的样子),所以对Kotlin的协程做了些了解,虽然当前还是很懵,但也算有些收获。文章主体引用了文末的第一篇文章。第一篇有些浅显,第二篇比较详细,有时间慢慢看一下。 总结下kotlin的协程实现原理:continuation 方法+ 状态机(每个continuation 风格的方法会创建一个状态机) 为什么使用Kotlin协程 在 Android 上,避免阻塞主线程是非常必要的。主线程是一个处理所有界面更新的线程,也是调用所有点击处理程序和其他界面回调的线程。因此,主线程必须顺畅运行才能确保出色的用户体验 在实际开发中我们会遇到这种场景 创建子线程执行耗时操作,然后切换到主线程处理界面显示逻辑;但是如果我们在一个接口请求完成后,拿到这个接口返回的结果,在需要去请求另一个接口时,逻辑就会十分复杂,就会出现回调地狱;并且如果在需要考虑接口失败的场景呢? 使用Rxjava优化上面的场景;没有内存泄漏、支持取消、正确的使用线程,但是它比较复杂,如 subscribeOn、observeOn、map 或者 subscribe,都需要学习 这个时候kotlin 协程就出场了,它可以帮我们解决上面的痛点 前置知识 在阅读 Kotlin 源码之前,可以先了解一些前置知识。 Function Function 是 Kotlin 对函数类型的封装,对于函数类型,它会被编译成 FunctionX 系列的类: Kotlin 提供了从 Function0 到 Function22 之间的接口,这意味着我们的 lambda 函数最多可以支持 22 个参数,另外 Function 接口有一个 invoke 操作符重载,因此我们可以直接通过 () 调用 lambda 函数: 编译成 Java 代码后: 可以看到对于 lambda […]

lWoHvYe 无悔,专一