gomaxprocs 的上限
问题:gomaxprocs 可以设置为大于计算机核数的值吗?
回答:
是的,gomaxprocs 可以超过计算机的核数。当设置 gomaxprocs 时,本质上是增加了 Go 调度程序同时管理的 goroutine 的数量。
但是,需要注意的是,设置过高的 gomaxprocs 值并没有明显的好处。Go 的调度程序是一个非抢占式调度程序,这意味着它不会主动中断正在执行的 goroutine。因此,即便 gomaxprocs 的值大于 CPU 核数,也只有 CPU 核数个 goroutine 同时执行。
此外,过高的 gomaxprocs 值可能会导致以下问题:
因此,最佳实践是在大多数情况下将 gomaxprocs 设置为与 CPU 核数相同的值。对于涉及到大量 CGO 调用或 I/O 绑定的服务,可以适当增加 gomaxprocs 的值,以提高并发性。