最大值为 256;但请注意,如果您将其设置得更高,则不会出错。https://golang.org/src/runtime/debug.go?s=534:560#L712 // GOMAXPROCS sets the maximum number of CPUs that can be executing13 // simultaneously and returns the previous setting. If n < 1, it does not14 // change the current setting.15 // The number of logical CPUs on the local machine can be queried with NumCPU.16 // This call will go away when the scheduler improves.17 func GOMAXPROCS(n int) int {18 if n > _MaxGomaxprocs {19 n = _MaxGomaxprocs20 }21 lock(&sched.lock)22 ret := int(gomaxprocs)23 unlock(&sched.lock)24 if n <= 0 || n == ret {25 return ret26 }27 28 stopTheWorld("GOMAXPROCS")29 30 // newprocs will be processed by startTheWorld31 newprocs = int32(n)32 33 startTheWorld()34 return ret35 }Line 19将总数设置为_MaxGomaxprocs。这是...https://golang.org/src/runtime/runtime2.go?h=_MaxGomaxprocs#L407const ( // The max value of GOMAXPROCS. // There are no fundamental restrictions on the value. _MaxGomaxprocs = 1 << 8)二进制形式的位移是100000000和 1 是int在 64 位系统上,Go 使其成为 Int64,这意味着最大值是 256。(intGo 中的32 位系统将是 int32,但值为 256)现在,只要将其设置为多于您的内核数量 - 这一切都取决于您的工作负载和正在发生的 CPU 上下文切换(例如,您的 go 程序强制发生多少锁,或者您是否mutex.Lock()在任何地方使用等)。请记住,无论是否需要,Golang 都会抽象出上下文切换。基准测试是您的朋友。如果您的应用程序运行 10,000 个 goroutine,而几乎没有 cpu 上下文切换(遵循良好的设计模式),那么是的,将那个吸盘提升到 256 并让它运行。如果您的应用程序阻塞并通过上下文切换/线程创建大量 CPU 等待时间,则将其设置为 8 或 4,甚至可以在所有mutex锁定进行时为其提供喘息的空间。