调度循环切换goroutine的条件

调度循环切换goroutine的条件

在一个调度循环中,是怎么判断要执行goexit,结束本次goroutine的调用,我能够想到的就是协程阻塞的情况,请问老师还有什么情况下会结束本次调度?

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

第一课应该讲过,如果碰到可接管的阻塞,就进 gopark 挂起正在执行的 g,然后进下一次调度

具体的场景翻一下 ppt~

  • softtr 提问者 #1

    如果这个goroutine不会遇到阻塞,比如一个耗时超级长的计算任务,那是会一直做这个计算任务结束才会进入到下一个调度循环吗?有没有时间限制呢。。。诶,说着说着咋感觉这好像就是sysmon的retake操作?

    2021-06-20 22:42:50
  • Xargin 回复 提问者 softtr #2

    对的,你说的这个是 1.14 有了抢占式调度以后加的逻辑,有个 10ms 的抢占~

    2021-06-20 23:28:35
  • Xargin #3

    翻了一下 1.13 的代码,10ms 的抢占应该一直是有的,所以上面这个说的有问题~

    2021-06-21 20:14:53
反卷斗士 2021-06-20 10:20:46

 执行 goexit 是结束 goroutine  的运行了,这里说的是 gopark 吧​

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师