image.png
什么是协程
协程(Coroutines)是一种比线程更加轻量级的存在,正如一个进程可以拥有多个线程一样,一个线程可以拥有多个协程。
image.png
有一点必须明确的是,一个线程的多个协程的运行是串行的。 如果是多核CPU,多个进程或一个进程内的多个线程是可以并行运行的,但是一个线程内协程却绝对是串行的,无论CPU有多少个核。毕竟协程虽然是一个特殊的函数,但仍然是一个函数。一个线程内可以运行多个函数,但这些函数都是串行运行的。
当一个协程运行时,其它协程必须挂起。
GlobalScope.lunch
GlobalScope.launch用于启动了一个运行在子线程的顶层协程。
GlobalScope继承于CoroutineScope(协程的生命周期),表示此协程的生命周期随应用程序的生命周期。 实例:
代码语言:javascript复制fun main() {
GlobalScope.launch {
// 在应用程序的生命周期内启动一个新的协程并继续
delay(1000L)
// 非阻塞的等待1秒钟
println("【${Thread.currentThread().name}】World!")
}
println("【${Thread.currentThread().name}】Hello,")
Thread.sleep(2000L)
// 阻塞的等待2秒钟,因为协程的生命周期受应用程序生命周期限制,所以这里保证协程内部逻辑执行完
}
运行结果:
代码语言:javascript复制【main】Hello,
【DefaultDispatcher-worker-1】World!