技术文章:C语言协程的代码细节( 二 )


定时器的精度受限于epoll_wait()的等待时间 。

技术文章:C语言协程的代码细节

文章插图
epoll主框架函数
__scf_co_task_run() , 可以让“协程任务”首次运行 , 或者再次恢复运行 。
技术文章:C语言协程的代码细节

文章插图
_scf_co_task_run()函数
这个函数只是调用了__asm_co_task_run() , 具体的长跳转在汇编里实现 。
因为长跳转涉及到细致的内存控制 , 只能用汇编实现 。
运行结果:
要在本机上用命令nc -vv -l 2000当服务端 。
技术文章:C语言协程的代码细节

文章插图
 
打印的日志 , 是长跳转时的栈信息的变化 。
两个汇编函数的大概功能 , 如下面的3张图 。
细节就不说了 , 这种代码 , 时间久了连作者都快看不懂了[捂脸]
技术文章:C语言协程的代码细节

文章插图
 
技术文章:C语言协程的代码细节

文章插图
 
技术文章:C语言协程的代码细节

文章插图

【技术文章:C语言协程的代码细节】


推荐阅读