Skip to content

有栈协程和无栈协程

有栈协程

  • 有栈协程是指给每个协程开辟一个单独的栈空间,需要一套调度机制来对协程进行调度,类似线程调度。
  • 有栈协程之间是相互独立的,不存在调用关系,由调度器负责调度,对协程的调度相对公平,有栈协程又称对称协程
  • golang的协程就是典型的有栈协程

无栈协程

  • 无栈协程是指所有协程统一用一个栈,协程没有单独的栈空间,协程执行和函数调用类似。
  • 无栈协程的执行顺序和协程调用关系有关,调度不如有栈协程公平,无栈协程又称非对称协程。
  • 无栈协程相对轻量,对系统资源的消耗比有栈协程少
  • async/await,async就是把一个函数声明为异步的,即声明为一个协程,await就是启动一个协程并等待它执行完毕
  • js协程、c++20协程、python协程都是无栈协程