如何让goroutine占用cpu并由我(代码)控制来决定是否让出cpu?

ddxx11223 · · 1339 次点击
更多评论
应该是没有,感觉你应该从业务角度解决这个问题,而不是语言层面。
#1
channel的通信应该本质是也是I/O,但是I/O并不耗费CPU,它需要的CPU本身就非常小。而且Goroutine调度器做了很多事情,比如对占用时间长的Goroutine发起抢占,所以本身当你开的Goroutine只有两个,一个耗时长,另一个耗时非常短,这种情况压根儿就没压力。当你Goroutine有非常多,一个耗时长,另外一堆耗时短,那么首先这些Goroutine会均匀分配到调度器上(前提是你开了runtime.GOMAXPROCS(X)有多个调度器),另一方面Go本身就有一个不需要调度器的监控线程,隔很短的时间便会抢占一次这个耗时长的Goroutine。
#3