并行和并发
协程是什么?
- 协程是⼀种在程序中处理并发任务的⽅案,也是这种⽅案的⼀个组件。
- 它和线程属于⼀个层级的概念,是⼀种和线程不同的并发任务解决⽅案:⼀套系统(可以是操作系统,也可以是⼀种编程语⾔)可以选择不同的⽅案来处理并发任务,你可以使⽤线程,也可以使⽤协程。
Kotlin 的协程是什么?
Kotlin 的协程和⼴义的协程不是⼀种东⻄,Kotlin 的协程(确切说是 Kotlin for Java 的协程)是⼀个线程框架。
优点
可以使用同步代码的方式来写出异步代码,避免了回调地狱。
- 耗时代码使用 suspend 提醒,后台运行。避免主线程调用出错。
- 可以自动切换线程。
suspend
suspend 仅仅为一个提示,提示被 suspend 修饰的代码要运行在一个协程内部。由耗时代码创建者提示调用者,这段代码是耗时的。这样避免了在主线程不小心执行了耗时代码。
它本身不是用来切换线程的。但是被 suspend 修饰的代码块内部必须要调用切换线程的代码。比如使用 withContext(Dispatchers.IO){}
挂起不阻塞
kotlin 协程中的挂起,本质上是切换到了另一个线程。
怎么使用
GlobalScope、viewModelScope、lifecycleScope、await、async、MainScope
协程泄漏
协程泄漏本质上是线程泄漏。