GMP调度模型
CSP
- (communicating sequential processes)go推荐的并发模型
- 其他语言一般是通过共享内存实现线程间通信。go推荐通过channel
- “不要以共享内存的方式来通信,相反,要通过通信的来共内存”
- goroutine -> channel -> goroutine
GM模型
- 缺点:限制GO并发
- 1、存在全局互斥锁,创建、调度G需要加锁
- 2、M依赖内存缓存,内存占用高
- 3、M直接传递G开销大
GMP模型
- M 的数量默认是 10000,P 的默认数量的 CPU 核数
- go调度器。本质上是把go程序中大量的goroutine分配到少量的线程上执行,利用CPU的多核,实现并发。
- 调度过程
- 缺点
- 内建函数检测记数器,解决部分抢占式调度,没有解决无内建函数调用”饿死”问题
一些调度策略
- https://blog.csdn.net/jigetage/article/details/103350180?utm_source=app&app_version=5.2.0
参考:
- https://learnku.com/articles/41728
- GMP模型演进:https://feiybox.com/2020/03/14/Golang-%E5%8D%8F%E7%A8%8B%E8%B0%83%E5%BA%A6%E5%8E%9F%E7%90%86/
- Go 面试官:GMP 模型,为什么要有 P?:https://juejin.cn/post/6968311281220583454
This post is licensed under CC BY 4.0 by the author.