RT。
比如现在有多个goroutine和多个channel,每个goroutine对应一个channel,会不断的从channel里pop数据出来。
我怎样让压力大的goroutine(即对应的channel里面数据较多)多占用cpu,压力小的(即对应的channel数据较少)少占用cpu,有没有runtime的代码可以去显式控制?
有疑问加站长微信联系(非本文作者)

RT。
比如现在有多个goroutine和多个channel,每个goroutine对应一个channel,会不断的从channel里pop数据出来。
我怎样让压力大的goroutine(即对应的channel里面数据较多)多占用cpu,压力小的(即对应的channel数据较少)少占用cpu,有没有runtime的代码可以去显式控制?
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
`单行代码`
应该是没有,感觉你应该从业务角度解决这个问题,而不是语言层面。
sleep
channel的通信应该本质是也是I/O,但是I/O并不耗费CPU,它需要的CPU本身就非常小。而且Goroutine调度器做了很多事情,比如对占用时间长的Goroutine发起抢占,所以本身当你开的Goroutine只有两个,一个耗时长,另一个耗时非常短,这种情况压根儿就没压力。当你Goroutine有非常多,一个耗时长,另外一堆耗时短,那么首先这些Goroutine会均匀分配到调度器上(前提是你开了runtime.GOMAXPROCS(X)有多个调度器),另一方面Go本身就有一个不需要调度器的监控线程,隔很短的时间便会抢占一次这个耗时长的Goroutine。