2. 协程是什么
协程不是线程,而是运行在线程之上的任务。关键区别:
| 对比 | 线程 Thread | 协程 Coroutine |
|---|---|---|
| 调度 | 操作系统内核 | 用户态(Kotlin 编译器状态机) |
| 阻塞 | 阻塞整个线程 | 挂起,线程可去干别的 |
| 开销 | MB 级栈、昂贵 | 几乎零成本、可海量创建 |
| 取消 | 粗暴且不可靠 | 协作式 cancel() |
「挂起」(suspend) 的含义:协程在某处让出线程,等结果好了再在合适的线程上恢复继续执行。对写代码的人来说,它看起来就是顺序执行的。
协程不是线程,而是运行在线程之上的任务。关键区别:
| 对比 | 线程 Thread | 协程 Coroutine |
|---|---|---|
| 调度 | 操作系统内核 | 用户态(Kotlin 编译器状态机) |
| 阻塞 | 阻塞整个线程 | 挂起,线程可去干别的 |
| 开销 | MB 级栈、昂贵 | 几乎零成本、可海量创建 |
| 取消 | 粗暴且不可靠 | 协作式 cancel() |
「挂起」(suspend) 的含义:协程在某处让出线程,等结果好了再在合适的线程上恢复继续执行。对写代码的人来说,它看起来就是顺序执行的。