[Go] golang的MPG调度模型
2024-08-28 03:58:35
MPG模式运行状态1
1)当前程序有三个M,如果三个M都在一个cpu运行,就是并发,如果在不同的cpu运行就是并行
2)M1,M2,M3正在执行一个G,M1的协程队列有三个,M2的协程队列有三个,M3的协程队列有两个
3)从上图可以看到:Go的协程是轻量级的线程,是逻辑态的,Go可以容易的起上万个协程
4)其他程序c/java的多线程,往往是内核态的,比较重量级,几千个线程就有可能耗光cpu资源
MPG模式运行状态2
1)分成两个部分来看
2)原来的情况是M1主线程正在执行G1协程,另外有三个协程在等待
3)如果G1协程阻塞,比如读取文件或者数据库
4)这时就会创建M2主线程(也可能是从已有的线程池中取出M2)并且将等待的三个协程挂到M2下执行,M1主线程下的G1仍然执行文件的读写
5)这样的MPG调度模式,既可以让G1执行,也不会让队列的其他协程一直阻塞
最新文章
- 支持向量机原理(四)SMO算法原理
- 纯css3手机页面图标样式代码
- APK签名是如何生成的
- Nim教程【十四】
- iptables案例手册
- 使用 crosswalk-cordova 打包sencha touch 项目,再也不用担心安卓兼容问题!
- 如何引用XML文件生成C#类
- git基本使用
- word编辑器解码集合
- Android自定义带标题边框的Layout
- windows2003 IIS6 部署MVC3和MVC4程序
- 每天一个Linux命令(11)--nl命令
- asp.net提高程序性能的技巧(一)
- phpstudy 版本切换注意的问题
- ImportError: Imageio Pillow plugin requires Pillow, not PIL!
- spring+mybatis的多源数据库配置实战
- js 选择指定区域
- ansible hosts文件编写,简单使用测试(普通用户、sudo用户、root用户登录权限测试)
- ORA-02291: 违反完整约束条件 - 未找到父项关键字
- Knockoutjs之observable和applyBindings的使用
热门文章
- C#所有经典排序算法汇总
- Centos 7 编译安装mariadb 5.5
- Badboy安装和简单介绍
- Loadrunner Controller运行不了,提示cannot create Vusers
- ubuntu下vscode认识 system(";pause";)的解决办法
- 第十 构建Web内容的技术
- UTC和GMT什么关系?moment处理世界时问题
- AChartEngine折线图实例
- Azure CosmosDB (14) 使用Postman访问CosmosDB REST API
- 编写antd配置表单组件