Go语言的GMP模型是Go运行时(runtime)用于处理并发任务的核心机制,它由三个主要部分组成:Goroutine(G)、Machine(M)和Processor(P)。
Goroutine(G):Goroutine是Go中的轻量级线程,每个Goroutine代表一个可以被调度和执行的任务。它们占用内存较小(通常为几KB),并且数量理论上只受内存大小的限制。Goroutine通过P(Processor)进行管理,只有绑定到P上后,才能被调度执行
Machine(M):M代表执行Go代码的线程,通常是操作系统的线程。M负责从P的本地队列中获取Goroutine来执行,如果本地队列为空,则会从全局队列中竞争获取Goroutine
Processor(P):P代表执行Go代码所需的上下文或资源。P负责管理Goroutine的队列,包括本地队列和全局队列。P的数量可以通过GOMAXPROCS设置,默认情况下与系统的核心数相同。M必须绑定到P上才能执行Goroutine
GMP模型的设计目的是为了提高Go语言的并发性能和效率。
参考文章:
Go调度系列—GMP是什么:https://cloud.tencent.com/developer/article/2239527
