stackless/stackfull coroutine 笔记

看了一些语言的coroutine的使用方式后,不免有些疑问,为什么区别这么大

这就涉及到stackless/stackfull实现方式的影响了


stackless coroutine的 栈 的调用栈复用,栈内信息保存在堆上(用于恢复)

stackfull coroutine的有独立私有的栈


stackless coroutine 最大的优势就是性能好,缺点就是易用性

stackfull coroutine的最大优势就是易用性,缺点就是空间浪费,性能差


stackless coroutine 增加语义化支持(通过强大的编译器做了很多事), 在易用性方面已经不弱于stackfull coroutine了

而stackfull coroutine 增通过预分配一定大小的栈,检查是否超出(go似乎是通过编译器在函数调用前插入检查代码)来扩容,采取一定的收缩策略(go似乎是垃圾回收时候进行收缩的)


参考:

https://stackoverflow.com/questions/28977302/how-do-stackless-coroutines-differ-from-stackful-coroutines

https://blog.varunramesh.net/posts/stackless-vs-stackful-coroutines/

推荐阅读更多精彩内容