RT。<br/>
比如现在有多个goroutine和多个channel,每个goroutine对应一个channel,会不断的从channel里pop数据出来。<br/>
我怎样让压力大的goroutine(即对应的channel里面数据较多)多占用cpu,压力小的(即对应的channel数据较少)少占用cpu,有没有runtime的代码可以去显式控制?
更多评论
channel的通信应该本质是也是I/O,但是I/O并不耗费CPU,它需要的CPU本身就非常小。而且Goroutine调度器做了很多事情,比如对占用时间长的Goroutine发起抢占,所以本身当你开的Goroutine只有两个,一个耗时长,另一个耗时非常短,这种情况压根儿就没压力。当你Goroutine有非常多,一个耗时长,另外一堆耗时短,那么首先这些Goroutine会均匀分配到调度器上(前提是你开了runtime.GOMAXPROCS(X)有多个调度器),另一方面Go本身就有一个不需要调度器的监控线程,隔很短的时间便会抢占一次这个耗时长的Goroutine。
#3