Skip to content

Latest commit

 

History

History
30 lines (18 loc) · 1.22 KB

coroutine.md

File metadata and controls

30 lines (18 loc) · 1.22 KB

协程

ref: https://jiajunhuang.com/articles/2018_04_03-coroutine.md.html

协程是用户空间的“线程”,由程序员自己控制代码跳转。

协程分为有栈(stackful)协程和无栈(stackless)协程:

  • 有栈协程:

    • 如goroutine和greenlet。每个G都有自己的栈指针SB,SP等。切换到某个G执行时,将SP和SB刷到寄存器, 使用G自带的栈。
    • 优点是更加灵活,可以整栈切换。
  • 无栈协程:

    • 如Python中的generator(带yield的函数就是generator),只把该函数执行时的帧带上, 执行时,使用调用者的栈。
    • 无栈协程职能拿最上面的帧。因此优点是要保存的数据较少。缺点是没有有栈协程灵活, 可以一锅端。通常性能也比有栈协程差一点。