golang 是抢占式调度 如果协程不主动让出 或者 阻塞 可以一直运行
设置处理的器的数量为1
- 是什么将 处理器设置为1 就是可以控制线程数呢?
- 在 GMP 模型中,P 与 M 一对一的挂载形式,通过设定 GOMAXPROCS 变量就能控制并行线程数。
演示案例
package main
import (
"fmt"
"runtime"
"runtime/debug"
"runtime/pprof"
"time"
)
func main() {
runtime.GOMAXPROCS(1)
debug.SetMaxThreads(10)
fmt.Println("start")
threadProfile := pprof.Lookup("threadcreate")
fmt.Printf(" init threads counts: %d\n", threadProfile.Count())
go func() {
for {
}
fmt.Println("end goruntine")
}()
time.Sleep(3 * time.Second)
fmt.Printf(" end threads counts: %d\n", threadProfile.Count())
fmt.Println("end")
}
默认是 10000 个线程
- 源码
- /usr/local/go/src/runtime/proc.go:686 schedinit
- sched.maxmcount = 10000
- 最大限制
- /usr/local/go/src/runtime/proc.go:6139
- //go:linkname setMaxThreads runtime/debug.setMaxThreads
// sched.maxmcount = 10000
本文来自博客园,作者:vx_guanchaoguo0,转载请注明原文链接:https://www.cnblogs.com/guanchaoguo/p/17280273.html