← 返回首页

在Mutex上自旋的goroutine 会占用太多资源吗

并不会,因为Go的自旋设计得非常"克制"和"智能"。

首先,自旋不是无休止的空转,它有严格的次数和时间限制,通常只持续几十纳秒。

其次,自旋仅仅在特定条件下才会发生,比如CPU核数大于1,并且当前机器不算繁忙(没有太多goroutine在排队)。

它是在赌,与其付出"goroutine挂起和唤醒"这种涉及内核调度的巨大代价,不如原地"稍等一下",因为锁可能马上就释放了。

所以,这种自旋是一种机会主义的短线优化,目的是用极小的CPU开销去避免一次昂贵的上下文切换,在锁竞争不激烈、占用时间极短的场景下,它反而是节省了资源。