stackless/stackfull coroutine 筆記

weixin_33935777發表於2018-05-16

看了一些語言的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/

相關文章