Kotlin协程的原理,没有说得比AndroidDeveloper官方更显浅的了

Posted 怪兽N

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin协程的原理,没有说得比AndroidDeveloper官方更显浅的了相关的知识,希望对你有一定的参考价值。

摘取 androidDeveloper https://developer.android.google.cn/kotlin/coroutines

Kotlin协程原理

协程是一种并发设计模式,您可以在 Android 平台上使用它来简化异步执行的代码。

Kotlin 使用堆栈帧管理要运行哪个函数以及所有局部变量。挂起协程时,系统会复制并保存当前的堆栈帧以供稍后使用。恢复时,会将堆栈帧从其保存位置复制回来,然后函数再次开始运行。即使代码可能看起来像普通的顺序阻塞请求,协程也能确保网络请求避免阻塞主线程。

Kotlin 协程使用调度程序确定哪些线程用于执行协程。要在主线程之外运行代码,可以让 Kotlin 协程在 Default 或 IO 调度程序上执行工作。在 Kotlin 中,所有协程都必须在调度程序中运行,即使它们在主线程上运行也是如此。协程可以自行挂起,而调度程序负责将其恢复。

AndroidDeveloper说得很明白,对于入门,务必请到https://developer.android.google.cn/kotlin/coroutines

特点

协程是我们在 Android 上进行异步编程的推荐解决方案。值得关注的特点包括:

  • 轻量:您可以在单个线程上运行多个协程,因为协程支持挂起,不会使正在运行协程的线程阻塞。挂起比阻塞节省内存,且支持多个并行操作。

  • 内存泄漏更少:使用结构化并发机制在一个作用域内执行多项操作。

  • 内置取消支持取消操作会自动在运行中的整个协程层次结构内传播。

  • Jetpack 集成:许多 Jetpack 库都包含提供全面协程支持的扩展。某些库还提供自己的协程作用域,可供您用于结构化并发。

调度程序线程

Kotlin 提供了三个调度程序,以用于指定应在何处运行协程:

​ Dispatchers.Main - 使用此调度程序可在 Android 主线程上运行协程。此调度程序只能用于与界面交互和执行快速工作。示例包括调用 suspend 函数,运行 Android 界面框架操作,以及更新 LiveData 对象。

​ Dispatchers.IO - 此调度程序经过了专门优化,适合在主线程之外执行磁盘或网络 I/O。示例包括使用 Room 组件、从文件中读取数据或向文件中写入数据,以及运行任何网络操作。

​ Dispatchers.Default - 此调度程序经过了专门优化,适合在主线程之外执行占用大量 CPU 资源的工作。用例示例包括对列表排序和解析 JSON。

以上是关于Kotlin协程的原理,没有说得比AndroidDeveloper官方更显浅的了的主要内容,如果未能解决你的问题,请参考以下文章

用 ChatGPT 帮你解答kotlin协程的原理级面试常见题

Kotlin 协程源码解析

Kotlin 协程源码解析

Kotlin 协程源码解析

Kotlin 协程源码解析

如何限制 kotlin 协程的最大并发性