协程

概念

提示 协程不是进程也不是线程,而是一个特殊的函数。这个函数可以在某个地方被“挂起”,并且可以重新在挂起处外继续运行。所以说,协程与进程、线程相比并不是一个维度的概念。

一个进程可以包含多个线程,一个线程也可以包含多个协程。简单来说,在一个线程内可以有多个这样的特殊函数在运行,但是有一点必须明确的是:一个线程中的多个协程的运行是串行的。 如果是多核CPU,那多个进程或一个进程内的多个线程是可以并行运行的。但是在一个线程内协程 却绝对是串行的,无论CPU有多少个核毕竟协程虽然是一个特殊的函数,但仍然是一个函数。 一个线程内可以运行多个函数,但这些函数都是串行运行的。当一个协程运行时,其他协程必须被挂起。

协程调度器种类

1) Dispatchers.Main : UI 线程执行协程;
2)Dispatchers.IO : IO 线程执行协程;
3)Dispatchers.Default  : CPU 密集型线程执行协程;
4)Dispatchers.Unconfined : 构建完协程立刻在当前线程执行;

协程作用域(CoroutineScope)

1)GlobalScope,生命周期是process级别的,即使Activity或Fragment已经被销毁,协程仍然在执行;

2)MainScope,在Activity中使用,可以在onDestroy()中取消协程;

3)viewModelScope,只能在ViewModel中使用,绑定ViewModel的生命周期;

4)lifecycleScope,只能在Activity、Fragment中使用,会绑定Activity和Fragment的生命周期。

启动方式

1)runBlocking: T

2)launch: Job

3)async/await: Deferred

详情请看: https://juejin.cn/post/7088711680665845768

posted @ 2022-11-11 23:15  野生野鸡码农  阅读(78)  评论(0编辑  收藏  举报