协程

  • 可以实现暂停恢复的函数

暂停可能的动作

  • 回到调度器(a),go语言

    image-20240404172722776

  • 回到caller(c),python yield

image-20240404172745890

  • 恢复另一个协程(s)

image-20240404172808678

调度器

  • 挑选合适的协程来运行
  • 当d需要暂停时,bcd整个调用链条都会被暂停

image-20240404173054580

非对称协程

  • 如果允许父子协程相互调用,可能会爆栈

image-20240404185508559

对称协程

  • 协程间没有明确的父子关系

image-20240404185554851

无栈协程与有栈协程

  • 无栈协程会定义自己的协程帧;有栈协程可以看作为函数,在自己分配的栈空间上运行

image-20240404185806852