美文网首页
Kotlin中的协程 - 协程与线程

Kotlin中的协程 - 协程与线程

作者: 盛世光阴 | 来源:发表于2021-07-21 22:14 被阅读0次

前言

Kotlin是一种在Java虚拟机上运行的静态类型编程语言,被称之为Android世界的Swift,在GoogleI/O2017中,Google宣布Kotlin成为Android官方开发语言

线程

线程是操作系统能够进⾏运算调度的最⼩单位,是包含在进程当中,是进程中的实际运作单位

线程的发展

早期的计算机⾮常昂贵,并且只能执行⼀些简单的运算,并且数据源是通过卡⽚机连接计算机然后将程序输⼊到计算机中,但是当卡⽚机在进⾏输⼊的时候,计算机只能进⾏等待,导致计算机资源的浪费,所以采⽤了批处理的⽅式进⾏解决,批处理⽅式的好处是会在输⼊室收集全部的作业,然后将其读取到磁带上,然后将此磁带输⼊到计算机中,计算机读取磁带然后进⾏⼯作,这样的好处就是计算机不⽤等待程序的输⼊,可以⼀直处在运算状态,充分的利⽤了计算机的性能,但是由于读取磁带的输⼊操作,以及输出操作的时候CPU还是空闲的,导致⾼速的CPU需要等待低速的IO设备⼯作,从⽽影响效率,这种情况下使⽤了脱机批处理系统,⽤⼀个单独的卫星机专⻔做输⼊和输出的操作,主机⽤来进⾏计算,并且他两可以并⾏⼯作,极⼤的提⾼了系统的处理能⼒

在随后的发展中硬件获得了两部分的主要能⼒,通道以及中断,通道是⼀种专⽤的处理部件,它能控制多台外设进⾏⼯作,负责外设与主机之间的信息传输,它可以独⽴于CPU运⾏,这样就可以使CPU和通道⼀并⾏⼯作,中断就是就是主机接到某种信号⻢上停⽌原来的⼯作,转去处理这⼀事件,当处理完毕则回到原来的⼯作点继续⼯作

主机CPU和外设IO虽然可以并⾏⼯作,但是并不能消除CPU对外部传输的等待,⽽且在⼀些输⼊少计算复杂的场景,外部设备也会处在空闲中多道程序设计是在计算机主机中同时存放⼏道相互独⽴的程序,使他们穿插进⾏运⾏,当CPU需要等待IO输⼊时,就切换到其他程序运⾏,如果内存中可以同时放⾜够多的程序,那么CPU的利⽤率就可以达到100%,这就引⼊了进程的概念,进程就是正在进⾏中的程序,每个进程会分配独⽴的内存地址空间保证互不⼲扰,同时CPU在做进程切换时也会保证从之前的位置开始执⾏,所以进程中除过程序还会有计数器,堆栈指针

这样在宏观上看是多个程序在同时执⾏,但是在微观上看其实是串⾏执⾏,在同⼀时刻CPU只会执⾏⼀个进程,当进程产⽣之后,进程是CPU调度的最⼩单位,但是每个进程有独⽴的内存,使得切换的开销变⼤,已经⽆法满⾜越来越多的复杂程序,于是就发明了线程,⼀个进程可以有多个线程,线程之间共享所在进程的内存,是操作系统调度的最⼩单位,在没有线程之前,可以当作⼀个进程只有⼀个线程,进程本身就是线程,所以线程也被称为轻量级的进程

线程和进程相同在单核的情况下也是并发执⾏,在宏观来看他们是并⾏的,在微观来讲他们是串⾏的

协程

上述说到,进程与线程都是内核的概念,协程是基于线程之上,⽐线程更轻量化的单元,他是可以由程序员⾃⼰管理的线程

协程的特点

1.线程的切换由系统内核负责,协程由⽤户⾃⼰调度,减少了线程上下⽂切换,提⾼了效率
2.线程的默认Stack⼤⼩是1M,协程更轻量更⼩
3.kotlin协程拥有结构化并发的特性,让协程更好管理
4.线程⼀般会使⽤多种回调,将结果回调到主线程中去,协程则可以直接进⾏上下⽂切换使得编写的代码看起来像是同步,其实是异步,阅读性很好
5.内存泄露更少,协程通过Scope传递了Context然后通过Job实现了结构化并发机制,在一个作用域内执行多项操作,可以更好地管理不同的并发代码块
6.内置取消机制,可以轻松简单的取消协程,并且取消事件也会随着作用域进行扩散

欢迎关注Mike的简书

Android 知识整理

相关文章

网友评论

      本文标题:Kotlin中的协程 - 协程与线程

      本文链接:https://www.haomeiwen.com/subject/exjrmltx.html