golang并发中的GPM

化蝶飞618 · · 1753 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

java中如何执行的并发

GPM和他们的不同之处

什么是G

G是goroutine的简称,代表一段需要被并发执行的go代码,其中保存了goroutine运行的一些状态信息,这样当goroutine获得执行权的时候,可以获取从哪个指令开始执行。

什么是M

M就是真正服务工作的工作线程,是一个内核级线程,G需要依赖M才可以运行。M行保存了自己使用时候的栈信息、当前正在执行的G信息、以及与之绑定的P。

什么P

P为M的执行提供了上下文,保存了M执行G的一些基本信息,保存了等待执行的G队列......
M只有绑定P才可以去执行G

GPM三者之间的关系

go的并发模型是特有的两级线程模型,有别与线程、协程、线程。又称为go程或者goroutine.
引用《go并发编程》里的一个图片,描述的三者关系十分形象:


image.png

特殊的goroutine

  • g0和m0
    系统中的每个M都会拥有一个特殊的Goroutine----g0,是系统在初始化M时候创建,他包含了各种调度、垃圾回收和栈管理等程序。其他的G被称为用户G,这个特殊的可以称为系统G。

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:化蝶飞618

查看原文:golang并发中的GPM

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1753 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传