有栈协程和无栈协程
有栈协程
- 有栈协程是指给每个协程开辟一个单独的栈空间,需要一套调度机制来对协程进行调度,类似线程调度。
- 有栈协程之间是相互独立的,不存在调用关系,由调度器负责调度,对协程的调度相对公平,有栈协程又称对称协程
- golang的协程就是典型的有栈协程
无栈协程
- 无栈协程是指所有协程统一用一个栈,协程没有单独的栈空间,协程执行和函数调用类似。
- 无栈协程的执行顺序和协程调用关系有关,调度不如有栈协程公平,无栈协程又称非对称协程。
- 无栈协程相对轻量,对系统资源的消耗比有栈协程少
- async/await,async就是把一个函数声明为异步的,即声明为一个协程,await就是启动一个协程并等待它执行完毕
- js协程、c++20协程、python协程都是无栈协程