Golang中的调度器

栏目: Go · 发布时间: 7年前

内容简介: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中的调度器》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

PHP for the World Wide Web, Second Edition (Visual QuickStart Gu

PHP for the World Wide Web, Second Edition (Visual QuickStart Gu

Larry Ullman / Peachpit Press / 2004-02-02 / USD 29.99

So you know HTML, even JavaScript, but the idea of learning an actual programming language like PHP terrifies you? Well, stop quaking and get going with this easy task-based guide! Aimed at beginning ......一起来看看 《PHP for the World Wide Web, Second Edition (Visual QuickStart Gu》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

MD5 加密
MD5 加密

MD5 加密工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换