返回

讲真,Kotlin 协程的挂起没那么神秘(故事篇)

Android

**序言** 

本篇讲述关于 Kotlin 协程的挂起原理,之前有一位朋友建议,能不能再出一篇用拟人化故事简单了解一下协程挂起与恢复原理的文章呢?最好是能跟线程的阻塞/唤醒做个关联。想了一阵子,直到前天下班搭公交回家......

**故事背景** 

公交站台边排着长长的队伍。 люди,老人,孩子,每个人都焦急地等待着。这时,一辆公交车缓缓驶来,车门打开,人们蜂拥而上。

一位名叫 Корутины (Coroutine) 的年轻女士也登上了公交车。她在车上找到了一个靠窗的位置,坐了下来。

 автобус (Bus) 载着乘客们驶离了公交站, Корутины 看着窗外,思绪万千。她想起自己今天的工作,想起自己要完成的项目。

汽车行驶在路上,越来越堵。 Корутины 发现,公交车停了下来,一动不动。原来,前方发生了一起交通事故,路被堵得水泄不通。

汽车里的乘客们开始变得焦躁不安。有些人开始大声抱怨,有些人开始给司机打电话。 Корутины 也有些着急,但她知道,现在着急也没有用。

司机熄了火,打开了车门,让乘客们下车。 Корутины 也跟着大家下了车。

乘客们站在路边,等着交通事故处理完毕。 Корутины 抬头看了看天,发现天已经黑了。

就在这时, Корутины 突然听到一个声音:“ Корутины, Корутины”。她回头一看,发现是一位中年男子,站在她的面前。

“我是 协程 (Coordinator)”,中年男子说道,“我知道你着急,但我现在需要你做一件事。”

“什么事?” Корутины 问。

“你把你的行李放在这里,然后上车去,等一等。” 协程 说。

“等一等?等什么?” Корутины 有些疑惑。

“别问那么多,快去!” 协程 有些不耐烦。

Корутины 只好照做了。她把行李放在了路边,然后上了车。

รถบัส 启动了,缓缓地驶离了交通事故现场。 Корутины 坐了一会儿,突然想起了什么。

“等等,我的行李!”她大叫道。

“别担心,你的行李会有人给你送去的。” 协程 说。

Корутины 还是有些担心,但她知道,现在她也做不了什么。

**结束** 

Корутины 的故事说完了。那么,这个故事和 Kotlin 协程的挂起原理有什么关系呢?

其实,Корутины 就是一个协程,协程 就是一种并发编程的工具,可以让你在不使用多线程的情况下,实现并发的任务。

Корутины 在公交车上等待交通事故处理完毕的过程,就是一个协程挂起的过程。挂起,就是把一个协程暂停下来,等待某个事件发生。

当交通事故处理完毕, Корутины 上车继续前进的过程,就是一个协程恢复的过程。恢复,就是让一个被挂起的协程继续运行。

线程的阻塞/唤醒和协程的挂起/恢复本质上是一样的。只不过,线程的阻塞/唤醒是由操作系统控制的,而协程的挂起/恢复是由协程库控制的。

**总结** 

通过这个故事,我们了解了 Kotlin 协程的挂起和恢复原理。希望大家能够理解协程的原理,并在自己的项目中使用协程。