写在前面:一名有三年Android开发经验的女程序员(欢迎大家关注我 ~期待和大家一起交流和学习Android的相关知识)
在 Kotlin 1.1 也就是 2017年初, 首次推出协程作为实验性质的特性开始,我们一直在努力向程序员解释协程的概念,他们过去常常使用线程理解并发,所以我们举的例子和标语是"协程是轻量级线程"。
此外,我们的关键 api 被设计为类似于线程 api,以简化学习曲线。这种类比在小规模例子中很适用,但是它不能帮助解释协程编程风格的转变。
当我们学习使用线程编程时,我们被告知线程是昂贵的资源,不应该到处创建它们。一个优雅的程序通常在启动时创建一个线程池然后使用它们搞些事情。有些环境(尤其是 iOS)甚至说"不赞成使用线程"(即使所有的东西仍然在线程上运行)。它们提供了一个系统内的随时可用的线程池,其中包含可向其提交代码的相应队列。
但是协程的情况不同。它可以非常方便地创建很多你需要的协程,因为它们非常廉价。让我们看一下协程的几个用例。
异步操作(Asynchronous operations)
假设你正在写一个前端 UI 应用(移动端、web 端或桌面端——对于这个例子并不重要),并且需要向后端发送一个请求,以获取一些数据并使用结果更新 UI 模型。我们最初推荐这样写:
fun requestSomeData() {
launch(UI) {
updateUI(performRequest())
}
}
这里,我们使用 launch(UI) 在 UI 上下文中启动一个新的协程&