Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 

Repository files navigation

coroutine

这个一个跨平台的协程库,并且是一个非对称的协程库,也就是说需要主动调用yield来放弃执行权,用resume来恢复某一个协程的执行。他不支持随意的创建协程, 只能由控制线程来创建协程,resume某一个协程,并且在具体的某一个协程中yield到控制线程,这样做是为了做到共享栈。 实现思路就是类似setjmp longjmp的方式,只是setjmp longjmp用的jmp_buf布局是不可知的,所以这里用确切的jmp_buf布局,这样切换调用栈比较方便。 在windows下切换调用比较麻烦,需要考虑gs段的情况,并且会有当前栈帧访问前一个栈帧的指令(需要保护)。 该协程库支持共享栈跟独立栈。 共享栈带来的好处是不大需要考虑栈的大小,带来的就是需要栈拷贝,并且因为栈拷贝所以不支持随意的创建跟resume协程。 独立栈带来的好处是性能更好,创建跟resume更加灵活,但是一直会有一把栈溢出的剑悬在头顶。

该库只支持64位 windows下只要打开解决方案直接编译就行,需要VS2013以上版本 linux下采用cmake编译 需要gcc 4.8.0以上版本

About

跨平台的协程库,支持共享栈跟独立栈

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages