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并发编程》里的一个图片,描述的三者关系十分形象:
特殊的goroutine
- g0和m0
系统中的每个M都会拥有一个特殊的Goroutine----g0,是系统在初始化M时候创建,他包含了各种调度、垃圾回收和栈管理等程序。其他的G被称为用户G,这个特殊的可以称为系统G。
有疑问加站长微信联系(非本文作者)