当 Go Scheduler 在 GMP 模型中创建新的 M 和 P
在 Go 的 GMP(Goroutine、Machine、Processor)模型中,调度器根据特定条件管理 M(机器)和 P(处理器)的创建。
M 创建
M 是为了响应特定事件而创建的,例如:
P 创建
P 是在程序启动时根据 GOMAXPROCS 环境变量创建的,该变量指定可用P的最大数量。默认值为系统上逻辑CPU的数量。
示例分析
在您的示例代码中,您有两批goroutine运行数据库操作。每个 goroutine 执行阻塞 I/O 操作。
因此,在您的情况下,调度程序将为第二批 goroutine 创建超过 8 M,因为操作被阻塞。 P 将根据 GOMAXPROCS 值限制为 1,但 M 将根据需要动态创建。
其他资源
进一步了解,请参考以下内容资源:
以上是当 Goroutine 执行阻塞操作时,Go 调度器如何创建新的 M 和 P?的详细内容。更多信息请关注PHP中文网其他相关文章!