关于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
静,静,静