目录
前言
在文章正式上干货之前,先说一点背景吧;我是 Kotlin 协程官方文档的译者,大家在 Kotlin 中文官网上看到的绝大多数协程的中文官方文档都是我翻译的。
官方文档可以说是比较全面的介绍了协程的使用,但是就我的感觉来说,这些文档分布的比较散乱,甚至还有三篇分布在协程的官方 Github 的 project 中,很多协程的初学者对这些文档的阅读顺序也常常感到摸不到头脑。这里我将一共 15 篇文档的学习顺序做一个整理,如果你还不了解如何使用协程,可以参考我如下的列举:
首先,如果您不了解什么是协程,以及不清楚如何将协程引入您的项目,你可以按顺序阅读这两篇教程:
接下来两篇官方文档类似于导读或目录,简述了一下协程的理念,以及给出了一些干货的链接,这两篇导读本身倒是没啥干货:
然后就是大量的正餐了,如下九篇官方文档介绍了协程使用的方方面面,一定要读懂:
上面九篇文档读完,再配以大量的实践,你应该已经掌握了协程的基本用法,并开始思考使用它的场景,你可能想知道如何使用协程编写 UI 应用程序,亦或是你可能对协程和响应式流(例如 RxJava)之间的异同和关系有疑问,那么可以参考下面两篇被刊登在官方 Github 上的指南:
现在你应该已经掌握协程在绝大多数场景下的用法,于是你可能好奇于它的实现原理,那么可以阅读这篇官方 Keep:
目前这就是协程全部的官方资料,两篇指南和一篇 Keep,都是刊登在 Github 上的;目前 Kotlin 中文站的站长是灰蓝天际老哥,所以上面给出的指向 Github 的地址是指向他 Fork 的版本,以上所有文档的英文原版,都可以在 Kotlin 的英文官网,以及官方的 Github 上找到。
Kotlin 目前是一门多平台语言,虽然协程的设计思想是统一的,但它们在底层的实现原理上会有所不同,例如,在 JVM 和 Android 上,协程的实现要基于线程池的 API,但是在 JS 平台上,由于 JS 本身不支持多线程,所以协程这时必定就不会产生并行。作为一名 Android 工程师,本文将致力于阐述协程在 Android 平台和 JVM 平台的原理,而 JS 平台以及众多的 Native 平台则暂不讨论。
本文将会先介绍一些协程的设计思想,然后详细讲解一下协程的编译相关以及标准库等内容,然后根据源码深入到协程调度器的底层实现细节(调度器这一部分我认为是最值得去看的)。