内容简介:golang采用了m:n线程模型,即m个gorountine(简称为G)映射到n个用户态进程(简称为P)上,多个G对应一个P,一个P对应一个内核线程(简称为M)。golang实现的协程调度器,其实就是在维护一个G、P、M三者间关系的队列。
底层实现
golang的m:n线程模型
golang采用了m:n线程模型,即m个gorountine(简称为G)映射到n个用户态进程(简称为P)上,多个G对应一个P,一个P对应一个内核线程(简称为M)。
- G:一个G就是一个gorountine,保存了协程的栈、程序计数器以及它所在M的信息。程序启动时,会创建一个主G,而每使用一次 go 关键字也创建一个G。未处理完就挂起的G放入一个全局等待队列中。
- P:P通过runtime.GOMAXPROCS()可以指定事先生成多少个P,最多不能超过256个,指定完P数目就不变了。一开始P都是空闲的,不挂有任何G。运行时,一个P上面挂N个G,并把这些G存入一个队列,一个P下面对应一个M。
- M:M数量可能会大于P数量,M数目可以通过pstree查看。程序启动时,会创建第一个M,这个M是监控线程,不是工作线程。
golang实现的协程调度器,其实就是在维护一个G、P、M三者间关系的队列。
以上所述就是小编给大家介绍的《Golang中的调度器》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 理解golang调度之一 :操作系统调度
- 理解golang调度之二 :Go调度器
- Golang 源码学习调度逻辑(三):工作线程的执行流程与调度循环
- Node.js CPU调度优化(多服务器多核心分配调度)
- Hadoop 容器调度器与公平调度器原理和实践深入剖析-Hadoop商业环境实战
- golang调度器
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
P2P网贷投资手册
徐红伟 / 同济大学出版社 / 2015-4 / CNY 28.00
《P2P网贷投资手册》由“P2P网络借贷知多少”、“新手如何开始P2P网贷投资”和“如何确定适合自己的网贷投资策略”三部分组成。将网贷之家平台上众多投资人和从业者的智慧集结成册,分享给网贷投资上的同路人。一起来看看 《P2P网贷投资手册》 这本书的介绍吧!