基本概念
自 Go 1.5 开始,Go的GOMAXPROCS 默认值已经设置为CPU的核数,这允许我们的Golang程序充分使用机器的每一个 CPU, 最大程度的提高我们程序的并发性能。Golang的调度器采用M-P-G
- G 代表 goroutine,即用户创建的 goroutines
- P 代表 Logical Processor,是类似于 CPU 核心的概念,其用来控制并发的 M 数量
- M 是操作系统线程。在绝大多数时候,P 的数量和 M 的数量是相等的。每创建一个 P, 就会创建一个对应的 M
通过设置GOMAXPROCS环境变量可以控制P的数量
export GOMAXPROCS=1
来看下程序中通过runtime获取该变量
package main
import (
"fmt"
"runtime"
)