学习Golang最重要的是要理解GMP模型,因为这是Golang的核心。从字面意

唠唠话 2024-12-23 22:31:12

学习Golang最重要的是要理解GMP模型,因为这是Golang的核心。从字面意思理解,GMP模型就是协程(G),线程(M),调度器(P)模型。 Golang进程启动时,会创建多个线程(M)和调度器(P),并将每个线程(M)与每个调度器(P)进行绑定。每个调度器(P)都会维护着两个队列(本地队列和全局队列)来保存新创建的协程(G)。当我们使用go func创建一个协程后,这个协程首先会放入调度器(P)的本地队列,只有当本地队列满了后,才会放入全局队列。然后执行协程时,调度器(P)会调度与之绑定的线程(M)去执行协程,先查询本地队列,当本地队列为空时,再去查询全局队列或从其他调度器本地窃取。 线程(M)的数量通常与CPU核心数保持一致,而调度器(P)的数量则通常由环境变量GOMAXPROC决定,但一般是设置为核心数的一半。

0 阅读:0
唠唠话

唠唠话

感谢大家的关注