程序不会打印也不会退出,为啥??

victorl · · 1148 次点击
并不是有函数调用就行,需要runtime.Gosched()。我贴一下我当时的代码,循环体内有调用函数的。 ```go func (c *RateLimitPerSec) Check() (ok bool) { count := c.countRate if count < c.rate { ok = atomic.CompareAndSwapUint64(&c.countRate, count, count+1) } return ok } ``` ```go cpuNu := runtime.NumCPU() for i := 1; i < cpuNu; i++ { go func() { for { ra.Check() } }() } ```
#4
更多评论
死循环里不能啥也不干,会导致 CPU 飙升。
#1
在写个限速的库,原本是用锁来实现的一些操作,后来改成原子操作,跑基准测试的时候发现的。试过其他语言不会这样,我想这种特殊场景暴露出goroutine调度的问题,可能是个坑。
#2