【Kotlin学习】协程的基本概念(1)

本文详细探讨了协程的概念、线程区别、关键概念如CoroutineContext、CoroutineScope和Dispatcher,以及常用的CoroutineBuilders如launch、async和runBlocking。重点讲解了挂起函数、延迟与yield,以及CoroutineDispatcher的不同实现。

协程的基本概念

协程定义

它是一种用户态的轻量级线程,协程的调度完全由用户控制。它有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈,直接操作栈则基本没有内核切换的开销,可以不加锁地访问全局变量,所以上下文的切换非常快。协程虽然是微线程,但并不会和某一个线程绑定,它可以在A线程中执行,经过某一个时刻的挂起,等下次调度到恢复执行的时候,很可能会在B线程中执行。

线程和协程的区别

线程的阻塞代价是昂贵的,而协程使用了更简单、代价更小的挂起来代替阻塞

协程常用基本概念

1.CoroutineContext
协程上下文,它包含一个默认的协程调度器,所有协程都必须在CoroutineContext

2.CoroutineScope
协程作用域,它一个接口只包含一个属性coroutineContext。它定义了一个协程的作用范围。每个Coroutine builder都是CoroutineScope的扩展,CoroutinesScope会在具有生命周期的实体上实现。Kotlin定义一个全局的作用域GlobalScope,用于启动顶级的协程,这些协程会在整个应用程序生命周期内运行

3.CoroutineDispatcher
协程调度器,它用来调度和处理任务,决定了相关协程应该在哪个或哪些线程中执行,kotlin的协程包含多种协程调度器

4.Suspend
关键字,协程可以被挂起而无需阻塞线程。我们使用suspend关键字来修饰可以被挂起的函数。被标记为suspend的函数只能运行在协程或者其他suspend函数中。suspend可以修饰普通函数、扩展函数和Lambda表达式

5.suspension point
协程每个挂起的地方是一个suspension point

6.Continuation
字面意思是继续、持续的意思。由于协程可能是分段执行的:先执行一段,挂起,再执行一段,再挂起…相邻的两个suspension point之间被称为Continuation。Continuation用来表示每一段执行的代码,一个完整的协程程序包含多个Continuation

7.Job
任务执行的过程被封装成Job,交给协程调度器处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值