如何结束子 goroutinue 求助

j00279583 · · 1191 次点击
我觉得调度是go去处理的,业务开发不必管这个goroutine是否一直占用着cpu,没使用多核的情况下,看着可能是这个readsomething占用cpu,但是很有可能其他goroutine也得到了cpu的时间片。 回到这个问题,不知道我理解的对不对,也不知道你这个修改全局函数是啥意思,我理解就是相当修改全局的变量,既然readsomething修改了全局函数,那么不如把全局函数赋值给一个变量,然后对变量进行修改,timeout后,这个变量在栈中也被释放了,不会影响全局;假如最后返回结果,可以在返回结果之前,将修改的值重新赋给全局值,也达到了修改的目的。
#8
更多评论
go dosomething() 怎么没把ctx带过去。。ctx不就是做这个事的么 然后select{} 在dosomething里做,就能在timeout到了之后return,结束这个goroutine了
#1
j00279583
做一个特工
你的意思是这个吗? 但是realdosometing 一直占用cpu啊。不能走到 done的那个分支啊? 求指教。 ```go func dosomething(ctx){ select { case <-ctx.Done(): fmt.Println("time out.") default: // realdosomething } } ```
#2