关于go语言高并发的学习

首先得了解协程与系统线程的对比:

1.系统线程再切换时开销太大,再内核态

2.线程创建,内存会开辟一个栈,这个栈会大很多,而且初始化之后就不能变化,而协程的栈可自动伸缩

 

grouptine属于两级线程调度模型:既有内核态也有用户态

 

grouptine是基于系统线程基础实现的多对多的关系,一个系统线程可能管理好几个grouptine

所以要深刻的学习有关操作系统进程与线程的机制

 

grouptine的G-P-M结构体模型

 

 g结构体的实例对象是grouptine,每一个grouptine对应一个,红色的g是正在运行的协程,灰色是正在排队的

m结构体的实例对象是系统线程,一个m对应一个线程

为了每个线程能够隔离出来,每个线程有自己私有grouptine队列,就是本地运行队列

p结构体的实例对象就是私有队列,m(线程)连接p结构体指向私有队列

参考资料:https://www.cnblogs.com/abozhang/p/10802319.html

https://www.cnblogs.com/williamjie/p/9267741.html

posted @ 2021-03-07 16:04  爱晒太阳的懒猫。。  阅读(108)  评论(0编辑  收藏  举报