2.3.1 协程设计原理与汇编实现coroutine 2
-
协程如何实现
callback是fd有数据接受时回调
请求接口1基本信息——2 详情——3目录
异步:
异步的实现,但是变成逻辑变成右上角同步的感觉,但实际还是异步!
借助switch被动切换 ,把callback里的recv提取出来
然后再封装switch,到send recv里面检查可不可行,可以switch,async就是在send recv前检查可不可以send recv
原语操作:switch(函数1, func2) 函数跳转方法
-
setjmp.c / longjump
gcc -o setjump setjump.c
setjump返回ret=0, func(0) arg1 longjump1
setjump(1)这里ret=1, func(1), arg2 longjump2
每个连接fd,对应一个jump buffer 用于函数跳转
-
ucontext.c
context上下文, 入口func1,2,定义栈顶stack1
没细听,没意义 记不住,有大概的认知即可
栈大小取决于业务量 ctx[0] ctx[1]互相存储!!!!跳完才打印,不马上打印
resume恢复 :main到对应协程内funcX里面可以做一个调度器 scheduler while(i-- < count) swapcontext 调度coroutine协程 funcX
让出yield在协程内部funcX内部切回到mainswapcontext(context[i], maincontxt)