kotlin-Coroutine协程
我是在深⼊学习 kotlin 时第⼀次看到协程,作为传统线程模型的进化版,虽说协程这个概念⼏⼗年前就有了,但是协程只是在近年才开始兴起,应⽤的语⾔有:go 、goLand、kotlin、python , 都是⽀持协程的,可能不同平台 API 上有差异
⾸次学习协程可能会费些时间,协程和 thread 类似,但是和 thread 有很⼤区别,搞懂,学会,熟悉协程在线程上如何运作是要钻研⼀下的,上⼿可能不是那么快
kotlin 高阶函数官⽅中⽂⽂档:kotlin 中⽂⽂档
简友资料库:JohnnyShieh
这⾥有个很有建设性意见的例⼦,Coroutines 代替 rxjava
Kotlin 1.3 Coroutines+Retrofit+Okhttp使⽤
怎么理解协程
我们先来把协程这个概念搞懂,不是很好理解,但是也不难理解
协程 - 也叫微线程,是⼀种新的多任务并发的操作⼿段(也不是很新,概念早就有了)
特征:协程是运⾏在单线程中的并发程序
优点:省去了传统 Thread 多线程并发机制中切换线程时带来的线程上下⽂切换、线程状态切换、Thread 初始化上的性能损耗,能⼤幅度唐提⾼并发性能
漫画版概念解释:漫画:什么是协程?
简单理解:在单线程上由程序员⾃⼰调度运⾏的并⾏计算
下⾯是关于协程这个概念的⼀些描述:
协程的开发⼈员 Roman Elizarov 是这样描述协程的:协程就像⾮常轻量级的线程。线程是由系统调度的,线程切换或线程阻塞的开销都⽐较⼤。⽽协程依赖于线程,但是协程挂起时不需要阻塞线程,⼏乎是⽆代价的,协程是由开发者控制的。所以协程也像⽤户态的线程,⾮常轻量级,⼀个线程中可以创建任意个协程。
Coroutine,翻译成”协程“,初始碰到的⼈马上就会跟进程和线程两个概念联系起来。直接先说区别,Coroutine是编译器级的,Process和Thread是操作系统级的。Coroutine的实现,通常是对某个语⾔做
相应的提议,然后通过后成编译器标准,然后编译器⼚商来实现该机制。Process和Thread看起来也在语⾔层次,但是内⽣原理却是操作系统先有这个东西,然后通过⼀定的API暴露给⽤户使⽤,两者在这⾥有不同。Process和Thread是os通过调度算法,保存当前的上下⽂,然后从上次暂停的地⽅再次开始计算,重新开始的地⽅不可预期,每次CPU计算的指令数量和代码跑过的CPU 时间是相关的,跑到os分配的cpu时间到达后就会被os强制挂起。Coroutine是编译器的魔术,通过插⼊相关的代码使得代码段能够实现分段式的执⾏,重新开始的地⽅是yield关键字指定的,⼀次⼀定会跑到⼀个yield对应的地⽅
对于多线程应⽤,CPU通过切⽚的⽅式来切换线程间的执⾏,线程切换时需要耗时(保存状态,下次继续)。协程,则只使⽤⼀个线程,在⼀个线程中规定某个代码块执⾏顺序。协程能保留上⼀次调⽤时的状态,不需要像线程⼀样⽤回调函数,所以性能上会有提升。缺点是本质是个单线程,不能利⽤到单个CPU的多个核
协程是跑在线程上的优化产物,被称为轻量级 Thread,拥有⾃⼰的栈内存和局部变量,共享成员变量。传统 Thread 执⾏的核⼼是⼀个while(true) 的函数,本质就是⼀个耗时函数,Coroutine 可以⽤来直接标记⽅法,由程序员⾃⼰实现切换,调度,不再采⽤传统的时
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论