zoukankan      html  css  js  c++  java
  • [Go] golang的MPG调度模型

    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执行,也不会让队列的其他协程一直阻塞

  • 相关阅读:
    [编程题-网易]小易的升级之路
    [腾讯编程题]微信红包
    [编程题]生成格雷码
    [编程题]二叉树-网易
    安装wepack
    css选择器
    宽和高
    配置环境变量
    offsetLeft在各浏览器的值
    容易忘记的css属性和动画属性
  • 原文地址:https://www.cnblogs.com/taoshihan/p/11295950.html
Copyright © 2011-2022 走看看