《记一次latency问题排查:谈Go的公平调度的缺陷》一文发现了一个现象:从网络消息可读,到读网络的goroutine被再次调度,中间花费了4.368ms !!!
很遗憾的是作者想当然的认为这是由于Go的调度器的设计缺陷,但是并不是。
我之前写过两篇Blog,都谈到了GOMAXPROCS的设置,出现上面这个现象是由于这个参数设置的太小导致。
请把GOMAXPROCS设置到比较大的数值。
更进一步的做法,可以修改GO源码中关于调度器的部分, 使得monitor线程的最大等待时间变小.可以从10ms改成1ms,即可大大减小goroutine的调度延时.