浅析Kotlin协程 ——协程是什么?

Kotlin协程的使用https://blog.csdn.net/qq_17798399/article/details/95245996

协程是什么?

首先kotlin协程是kotlin的扩展库(kotlinx.coroutines)。

线程在Android开发中一般用来做一些复杂耗时的操作,避免耗时操作阻塞主线程而出现ANR的情况,例如IO操作就需要在新的线程中去完成。但是呢,如果一个页面中使用的线程太多,线程间的切换是很消耗内存资源的,我们都知道线程是由系统去控制调度的,所以线程使用起来比较难于控制。这个时候kotlin的协程就体现出它的优势了,kotlin协程是运行在线程之上的,它的切换由程序自己来控制,无论是 CPU 的消耗还是内存的消耗都大大降低。

协程和线程区别与关系:

线程和协程的目的本质上存在差异:

  • 线程的目的是提高CPU资源使用率, 使多个任务得以并行的运行, 所以线程是为了服务于机器的.
  • 协程的目的是为了让多个任务之间更好的协作, 主要体现在代码逻辑上, 所以协程是为了服务于人的, 写代码的人. (也有可能结果会能提升资源的利用率, 但并不是原始目的)

在调度上, 协程跟线程也不同:

  • 线程的调度是系统完成的, 一般是抢占式的, 根据优先级来分配, 是空分复用.
  • 协程的调度是开发者根据程序逻辑指定好的, 在不同的时期把资源合理的分配给不同的任务, 是时分复用的.

作用上的不同:

  • 协程确保了代码逻辑是顺序的, 不管同步操作要是异步操作, 前一个完成, 后一个才会开始.
  • 线程可以被调度到CPU上执行, 这样代码才能真正运行起来.

协程与线程的关系:


协程并不是取代线程, 而且抽象于线程之上, 线程是被分割的CPU资源, 协程是组织好的代码流程, 协程需要线程来承载运行, 线程是协程的资源, 但协程不会直接使用线程, 协程直接利用的是执行器(Interceptor), 执行器可以关联任意线程或线程池, 可以使当前线程, UI线程, 或新建新程. 可总结如下:

  1. 线程是协程的资源.
  2. 协程通过Interceptor来间接使用线程这个资源.

Kotlin中文站

 

你可能感兴趣的:(Kotlin学习笔记)