GO语言GMP模型

目录

程序入口

 协程主动让出:

 被动让出:

 schedule

监控线程


程序入口

在执行一系列检查和初始化(创建多少个P,与M0关联)后,进入runtime.main,创建main goroutine,执行mian.mian。

 

 一开始GO语言的调度只有M和G。每个M获取G都要加锁。所以加入了P。一个P关联一个M,这样就可以从P的本地队列获取任务。


创建一个协程主要是调用newproc函数,而newproc函数是在G0创建的,为什么是G0?因为他的栈空间大!

 创建完新G(协程栈)后,会赋状态Grunnable,.表示可以运行的G..于是看情况调度到别的P


 协程主动让出:

 万一所有M都在忙,无法执行时间到的协程,怎么办?

 

 被动让出:

1.监控线程会监控运行时间过长的协程.

2.协程执行过程中栈增大到一定量后,1.14

3,信号量,.当检测到信号后,注入一个异步抢占函数调用,处理完信号后返回立刻执行被注入的异步抢占函数,而这个函数就有schedul逻辑 1.14

4,系统调用.监控线程还会抢占处在系统调用的P.因为执行系统调用就要切换到G0栈.在系统调用没执行完之前,这个M和G就抱团了.此时P可能关联到其他M.

 schedule

1看是否绑定了当前G,有就执行

2,看看GC是否等待

3,有没有要执行的runtimer

4,全局G调度部分到本地G

5,最后再次 本地G, 全局G,netpoll,steal from other p ..若是别人的G则要看看这个G是否有绑定的M.

5.G改为Grunning 状态,执行


监控线程

1,保障计时器正常执行

2,网络轮询

3,强制长时间运行的G 或处于系统调用的P

4,强制GC

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/4011.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小程序api的promise化

小程序根目录cmd运行安装命令 npm install --save miniprogram-api-promise1.0.4 安装完成之后先到根目录中删除miniprogram_npm文件夹(不删除构建npm时可能会出现问题) 删除之后再在工具中点击构建npm 构建成功之后会看到根目录中重新出现了miniprogram_npm文件夹 在app.j…

nodejs 下载地址 阿里云开源镜像站

nodejs 下载地址 阿里云开源镜像站 https://mirrors.aliyun.com/nodejs-release/ 我们下期见,拜拜!

1041.困于环中的机器人 874.模拟行走的机器人 模拟行走的机器人 2 (三道机器人的模拟题)

共性 对于直接行走类的题,我们都可以用 int[][] dirs new int[][]{{0,1}, {-1,0}, {0,-1}, {1,0}}; 来表示向 北 西 南 东 走一步可以 int x 0, y 0, d 0 xy 表示坐标,d表示方向,要和上面表示的方向对应由于是对应的 d 0 表示北 d 1 …

实现 Rollup 插件alias 并使用vitest提高开发效率

本篇文章是对 实现 Rollup 插件 alias | 使用 TypeScript 实现库的基本流程 | 使用单元测试提高开发效率 的总结。其中涉及到开发一个组件库的诸多知识点。 实现一个经常用的 rollup 插件 alias 首先执行npm init命令初始化一个package.json文件,因为插件使用了ty…

微服务: 05-rabbitmq设置重试次数并设置死信队列

目录 1. 上文传送门: 2. 前言简介: 2.1 问: 消费端重复循环异常如何解决? 2.2 为什么要使用死信队列 2.3 案例思路 -> ps: 以下案例经过测试(思路一/二实现原理一样) -> 2.3.1 思路一 -> 2.3.2 思路二 3. 案例代码 3.1 简单介绍案例 3.2 声明交换机 队…

分布式锁,学习笔记

什么是分布式锁 1.1 作用: 保证数据的正确性: 比如:秒杀的时候防止商品超卖,接口幂等性。 避免重复处理数据: 比如:1避免调度任务在多台机器重复执行,2避免缓存过期所有请求都去加载数据库。 一…

Redis实战案例19-Redis解决主从一致性问题

主节点(Master)“写操作”: 接收并响应客户端的读写请求。持久化数据到磁盘(根据配置可以选择使用RDB快照或者AOF日志)。将自己的写操作同步给所有的从节点。处理发布/订阅(Pub/Sub)模式中的发…

【剑指offer】11. 机器人的运动范围(java)

文章目录 机器人的运动范围描述示例1示例2示例3示例4思路完整代码 机器人的运动范围 描述 地上有一个 rows 行和 cols 列的方格。坐标从 [0,0] 到 [rows-1,cols-1] 。一个机器人从坐标 [0,0] 的格子开始移动,每一次只能向左,右,上&#xff…

ARM 架构是什么?

ARM(Advanced RISC Machines)架构是一种处理器架构,它是一种精简指令集计算机(RISC)架构。ARM架构最初由ARM Holdings(现在是SoftBank Group的子公司)开发,并在1980年代末和1990年代…

【PAT】1028.List Sorting

【PAT】1028.List Sorting Excel can sort records according to any column. Now you are supposed to imitate this function. Input Specification: Each input file contains one test case. For each case, the first line contains two integers N (≤105) and C, wher…

mysql的完全包含关系怎么写

问: mysql从a表查到aid有两值1,2,b表中存在a表的主键作为外键,从b表中查找完全包含aid的的值(1,2)的bid 答 如果你有一个表a包含主键列a_id,并且有一个表b,它具有一个…

数据结构和算法:深度优先搜索 (DFS) 和广度优先搜索 (BFS) 相关题目

文章目录 1. 岛屿问题(岛屿连通)1.1 岛屿数量1.1.1 DFS 解法1.1.2 BFS 解法 深度优先搜索 (DFS) 和广度优先搜索 (BFS)是比较难的算法问题,但也是面试常考题,因此需要认真研究并掌握。 DFS 用递归实现,BFS用栈实现 1. …

使用 SageMaker 对 Whisper 模型进行微调及部署

使用 SageMaker 对 Whisper 模型进行微调及部署 Whisper 作为 OpenAI 最新开源的自动语音识别(ASR)模型,采用了编码器-解码器(encoder- decoder)transformer架构,并使用了 68 万小时的从互联网收集的多语言…

PersistentVolume:怎么解决数据持久化

Kubernetes 的 Volume 对数据存储已经给出了一个很好的抽象,它只是定义了有这么一个“存储卷”,而这个“存储卷”是什么类型、有多大容量、怎么存储,我们都可以自由发挥。Pod 不需要关心那些专业、复杂的细节,只要设置好 volumeMo…

安卓APK反编译+修改+重打包+签名

目录 1.下载反编译工具包。2.将APK包,重命名为ZIP,解压。放到反编译根目录下。3.使用apktool反编译修改smail文件,进行重打包4.重新打包5.重签名 1.下载反编译工具包。 反编译工具包地址:百度网盘 提取码:dsu3 解压后…

AtcoderABC243场

A - Shampoo A - Shampoo ] 题目大意 高桥家有三个人:高桥、他的父亲和他的母亲。每个人每晚都在浴室洗头发。他们按照顺序使用AA、BB和CC毫升的洗发水。 问,今天早上瓶子里有VV毫升的洗发水。在不重新装满的情况下,谁会第一个用完洗发水洗头…

网工内推 | 美图秀秀招网工,大专以上,15薪,NP认证优先

01 美图公司 招聘岗位:网络工程师 职责描述: 1、美图大厦网络、分公司网络、IT相关项目的网络、办公内网服务器; 2、负责网络的设计、运行、管理和维护等工作; 3、负责远程办公环境的优化、运行、管理和维护工作; 4、…

python匿名函数Lambda

1、Lambda 函数简介 Lambda函数也被称为匿名(没有名称)函数,它直接接受参数的数量以及使用该参数执行的条件或操作,该参数以冒号分隔,并返回最终结果。为了在大型代码库上编写代码时执行一项小任务,或者在函数中执行一项小任务&a…

git merge详细用法

git merge用法 一、开发分支(dev)上的代码达到上线的标准后,要合并到 master 分支 git checkout dev git pull git checkout master git merge dev git push -u origin master二、当master代码改动了,需要更新开发分支&#xff…

吴恩达机器学习2022-Jupyter-用scikitlearn实现线性回归

1可选实验:使用Scikit-Learn进行线性回归 有一个开源的、商业上可用的机器学习工具包,叫做 scikit-learn。本工具包包含您将在本课程中使用的许多算法的实现。 1.1工具 您将利用 scikit-learn 以及 matplotlib 和 NumPy 中的函数。 2线性回归封闭式解决方案 Sc…