单线程循环

        线程在sheduled()->execute()->gogo()->业务方法->goexit()中循环,前三个方法的状态记录在g0栈中,后两者记录在协程自己的栈中.

        sheduled 在各种队列(本地,全局,其他线程那边拿)中拿到一个协程,然后用execute函数给一些g结构体字段赋值,跳转到gogo方法.

        gogo方法是汇编方法,传递gobuf指针(其中包括栈指针和程序计数器),在协程栈中插入goexit栈帧,用于协程结束后退出.同时跳转到程序计数器指示位置执行代码.

        g 协程执行结束,栈帧一个个退出直到退出到goexit栈帧.

        goexit函数执行mcall(g0exit)切换到g0 stack,执行g0exit函数设置协程状态,然后重新执行sheduled方法

        

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值