概念
提示 协程不是进程也不是线程,而是一个特殊的函数。这个函数可以在某个地方被“挂起”,并且可以重新在挂起处外继续运行。所以说,协程与进程、线程相比并不是一个维度的概念。
一个进程可以包含多个线程,一个线程也可以包含多个协程。简单来说,在一个线程内可以有多个这样的特殊函数在运行,但是有一点必须明确的是:一个线程中的多个协程的运行是串行的。 如果是多核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
标签:协程,函数,多个,线程,Activity,Dispatchers From: https://www.cnblogs.com/zuiniub/p/16882393.html