并行和并发

多线程-0.并发、并行、协程 - 图1

协程是什么?

  • 协程是⼀种在程序中处理并发任务的⽅案,也是这种⽅案的⼀个组件。
  • 它和线程属于⼀个层级的概念,是⼀种和线程不同的并发任务解决⽅案:⼀套系统(可以是操作系统,也可以是⼀种编程语⾔)可以选择不同的⽅案来处理并发任务,你可以使⽤线程,也可以使⽤协程。

Kotlin 的协程是什么?

  • Kotlin 的协程和⼴义的协程不是⼀种东⻄,Kotlin 的协程(确切说是 Kotlin for Java 的协程)是⼀个线程框架。

    优点

  • 可以使用同步代码的方式来写出异步代码,避免了回调地狱。

  • 耗时代码使用 suspend 提醒,后台运行。避免主线程调用出错。
  • 可以自动切换线程。

    suspend

    suspend 仅仅为一个提示,提示被 suspend 修饰的代码要运行在一个协程内部。由耗时代码创建者提示调用者,这段代码是耗时的。这样避免了在主线程不小心执行了耗时代码。

它本身不是用来切换线程的。但是被 suspend 修饰的代码块内部必须要调用切换线程的代码。比如使用 withContext(Dispatchers.IO){}

挂起不阻塞

kotlin 协程中的挂起,本质上是切换到了另一个线程。

怎么使用

GlobalScope、viewModelScope、lifecycleScope、await、async、MainScope

协程泄漏

协程泄漏本质上是线程泄漏。