Go —— GMP面试题

前言

关于GMP的详细讲解请移步:Go —— 协程

简单介绍一下Go的GMP调度模型

0)G:协程,M:系统线程,P:协程调度器

1)通过go func() 生成一个 G

2)G会优先放到P的本地队列,如果P的队列已满,则会放入全局队列中

3)G需要在M中执行,G通过P进行调度,M与P的关系是1:1对应的,如果P的本地队列为空,则会优先从全局队列中获取G,其次从其他MP组合中窃取G

4)M执行G的过程是一个循环的过程

5)如果M发生系统调度,则会释放P,P会找一个空闲的M进行执行,如果没有空闲的M,则会唤醒或者新建一个M

6)当M的系统调度停止后,会重新找空闲的P,如果找不到则会进入休眠或者销毁,G会被放入到全局队列中

问:M的数量是固定的还是动态的

在GMP调度的过程中,M会被动态唤醒、创建、休眠、销毁,所以是动态的

问:每一个P调用全局队列的概率大概为多少

大概为 1/p总数

P的个数默认为CPU的核数。每个P会周期性地查看全局队列中是否有G待运行并将其调度到M中执行,全局队列中的G主要来自从系统调用中恢复地G。之所以P会周期性地查看全局队列,是为了防止全局队列中的G长时间得不到调度机会而被“饿死”。

相关推荐

  1. <span style='color:red;'>面试</span><span style='color:red;'>题</span>

    面试

    2024-04-10 08:34:04      16 阅读
  2. 面试

    2024-04-10 08:34:04       5 阅读
  3. 面试分享——Elasticsearch面试

    2024-04-10 08:34:04       14 阅读
  4. 面试】Node.js高频面试

    2024-04-10 08:34:04       10 阅读
  5. 测试面试常见

    2024-04-10 08:34:04       34 阅读
  6. dockerfile的面试

    2024-04-10 08:34:04       36 阅读
  7. SpringCloud面试——Nacos

    2024-04-10 08:34:04       34 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-10 08:34:04       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-10 08:34:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-10 08:34:04       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-10 08:34:04       20 阅读

热门阅读

  1. 构建你的AI未来:CentOS 7上的dlib Docker魔法

    2024-04-10 08:34:04       12 阅读
  2. vue3中覆盖组件样式的方法

    2024-04-10 08:34:04       16 阅读
  3. Linux_Debian学习笔记

    2024-04-10 08:34:04       13 阅读
  4. vue3+elementPlus cron组件

    2024-04-10 08:34:04       12 阅读
  5. leetcode热题HOT146. LRU 缓存

    2024-04-10 08:34:04       17 阅读
  6. 如何在Linux中查找和删除软链接

    2024-04-10 08:34:04       19 阅读
  7. Flutter入门指南

    2024-04-10 08:34:04       16 阅读
  8. Spring Boot安装与配置

    2024-04-10 08:34:04       13 阅读
  9. 云计算综合实训平台(1)

    2024-04-10 08:34:04       13 阅读
  10. Apache MINA SSHD

    2024-04-10 08:34:04       14 阅读
  11. (十三)强缓存和协商缓存的区别

    2024-04-10 08:34:04       17 阅读