Go中M的上限及策略调整历史
https://github.com/golang/go/issues/60004
https://github.com/golang/go/commit/734b26d4b9b90cab4b770a8d55fdaeb3a7683bd7
排除额外的 M,它们用于 C 中创建的线程的 cgocallback。SetMaxThreads 限制的目的是避免意外的 fork 炸弹,例如数百万 goroutine 阻塞系统调用,导致运行时创建数百万个线程。 根据定义,这对于在 C 中创建的线程来说不是问题,因此我们将它们排除在限制之外。 请参阅 https:go.dev/issue/60004。 count := mcount() - int32(extraMInUse.Load()) - int32(extraMLength.Load()) 如果计数 > sched.maxmcount {
1 | debug.SetMaxThreads的默认限制为10k个线程,这是在创建M时由runtime.checkmcount强制执行的。 |
原文作者: fliter
原文链接:
https://dashen.tech/2023/05/15/Go中M的上限及策略调整历史/版权声明: 转载请注明出处