知识卡片

GMP分工

普通读书笔记卡 · 1480.a.1

内容

G 表示协程任务,M 表示操作系统线程,P 提供执行 Go 代码所需的调度资源。GMP 把任务、线程和调度权拆开,使大量协程能在有限线程上流动。

参考来源

- 位置:《Go语言底层原理剖析》第14章《协程初探》14.7节《GMP模型》 - 结论依据:原文明确"在GMP模型中,G代表的是Go语言中的协程(Goroutine),M代表的是实际的线程,而P代表的是Go逻辑处理器(Process)……在任一时刻,一个P可能在其本地包含多个G,同时,一个P在任一时刻只能绑定一个M",并说明 G 不固定绑定同一个 P、P 与 M 的对应关系也会变化,因此可以推出"GMP 把任务(G)、线程(M)、调度资源(P)三者拆开、允许动态重新组合"的结论。 - 原始内容:Go语言中经典的GMP的概念模型生动地概括了线程与协程的关系:Go进程中的众多协程其实依托于线程,借助操作系统将线程调度到CPU执行,从而最终执行协程。在GMP模型中,G代表的是Go语言中的协程(Goroutine),M代表的是实际的线程,而P代表的是Go逻辑处理器(Process),Go语言为了方便协程调度与缓存,抽象出了逻辑处理器。在任一时刻,一个P可能在其本地包含多个G,同时,一个P在任一时刻只能绑定一个M。