协程是什么
- 协程是一种编程思想,并不局限于特定的语言。
- 协程是轻量级的线程,基于线程池API,通俗的来说,就是官方提供的线程框架。
- 协程的调度完全由用户控制。
- 协程拥有自己的寄存器上下文和栈。
当我们在了解协程的时候,不可避免的会跟线程、进程作比较作分析,下面来贴个图便于理解:
线程主要用于做耗时操作,所以协程也是用来处理耗时任务。实现顺序编写异步代码,自动进行线程切换。
协程与线程的区别
- 一个线程可以多个协程,一个进程也可以单独拥有多个协程。
- 线程、进程都是同步机制,而协程则是异步。
- 协程能保留上一次调用时的状态,每次过程重入时,就相当于进入上一次调用的状态。
- 线程是抢占式,而协程是非抢占式的,所以需要用户自己释放使用权来切换到其他协程,因此同一时间其实只有一个协程拥有运行权,相当于单线程的能力。
- 协程并不是取代线程, 而是抽象于线程之上。
- 线程是被分割的CPU资源, 协程是组织好的代码流程, 协程需要线程来承载运行, 线程是协程的资源, 但协程不会直接使用线程。
- 协程直接利用的是执行器(Interceptor), 执行器可以关联任意线程或线程池, 可以是当前线程、UI线程或新建线程。
协程的几个关键点
- 能够挂起和恢复
- 程序自己处理挂起和恢复
- 自己处理挂起和恢复操作实现协程的运