P 的个数是固定的吗,M 的个数是固定的吗?
P 的个数是固定的吗,M 的个数是固定的吗?
提示
题眼: 背会即可。
P 的数量通常相对固定,由 GOMAXPROCS 控制,默认一般等于当前机器可用 CPU 核心数。
M 的数量则不是固定的,它会随着运行时状态动态变化:
- 某些
M可能因为系统调用或阻塞被挂起。 - 运行时可能创建新的
M去接替执行任务。 - 空闲的
M也可能被回收或放入空闲池中复用。
所以更准确地说:
P的数量通常由配置决定。M的数量由运行时按需动态调整。
重要
参考答案:
P 的个数一般是相对固定的,它主要由 GOMAXPROCS 这个参数控制,默认通常会设置成 CPU 核心数或者接近这个数量。因为 P 代表的是可以并行执行 goroutine 的调度资源,所以它不会无限增加。
M 的个数则不是固定的。Go 运行时会根据阻塞情况和任务执行情况动态创建或复用 M。比如某个 M 因为系统调用被阻塞了,原来绑定的 P 可能会解绑,再去绑定其他空闲的 M 继续工作。
所以面试里可以直接回答:P 主要受 GOMAXPROCS 控制,数量相对稳定;M 是动态变化的,不要求和 P 数量完全相等。
