- 协程,又称微线程,英文名coroutine
- 子程序或者又称函数,在所有语言中都是层级调用,比如A调用了B,B又调用的了C,C执行完毕返回,B执行完毕返回,最后A执行完毕返回。
- 所以子程序调用通过栈来实现的一个线程就是执行一个程序
- 子程序调用总是一个入口,一次返回,调用顺序是明确的。而协程的调用和子程序不同。
协程看上去也是子程序,但执行过程中,在子程序内部可中断,然后转而执行别的子程序,在适当的时候再返回来接着执行。
协程创造出来是用来解决异步任务的,不要与多线程搞混,多线程是并发处理任务,异步与并发不是一个概念,异步与同步才是描述一组指令的顺序,而并发和并行是指多个或多段可以独立运行的程序对系统资源(cpu)的占用
- 异步任务是我们常见的就是读取文件,网络请求等等的i/o操作(主要就是async与await的作用)
- 协程的核心概念函数或者一段程序能够被挂起,挂起后还能恢复。挂起和恢复都是可控的
- “挂起”和“恢复”两个概念,很多问题就引刃而解。协程中还有个一个重要的组成——状态机,因为协程将原本连续的逻辑拆散,需要状态机来维护状态,每一次的挂起和恢复都会切换到对应的状态,以便下一次的操作可以知道该做什么。