Go线程实现模型-核心元素的容器

news2024/10/6 16:24:58

核心元素的容器

图例

在这里插入图片描述

作用

3个全局容器存在的主要目的,都是为了罗列某个核心元素的全部

与G相关的调度器

与G相关的那4个非全局容器:调度器的可运行G队列、调度器的自由G队列、本地P的可运行G队列,以及本地P的自由G列表

全局G列表

任何G都会存在于全局G列表中,而其余的4个容器则只会存放在当前作用域内的、具有某个状态的G

  • 这里的两个可运行G列表中的G都拥有几乎平等的运行机会
  • 由于这种平等性的存在,无需关心那些可运行的G会进入哪个队列
可运行G队列

从Gsyscall状态转出的G都会被放入调度器的可运行G队列,而刚被运行时系统初始化的G都会被放入本地P的可运行G队列

至于从Gwaiting状态转出的G,有的会被放入本地P的可运行G队列,有的会被放入调度器的可运行G队列,还有的会被直接运行

此外,这两个可运行G队列之间也会互相转移G

  • 例如,调用runtime.GOMAXPROCS函数,会导致运行时系统把将死的P的可运行G队列中的G,全部转移到调度器的可运行G队列。这也是为了重新分配它们
  • 再如,如果本地P的可运行G队列已满,其中的一半G都会被转移到调度器的可运行G队列中

调度器的可运行G队列由两个变量代表

  • 变量runqhead代表队列的头部
  • runqtail则代表队列的尾部

一般情况下,新的可运行G会被追加到队列的尾部,并且已入队的G只会从头取走,这也体现了队列的FIFO(先进先出)特性

不过,新的可运行G有时候也会被插入队列头部,runtime.GOMAXPROCS函数调用就间接执行了此操作

自由G队列

另一方面,在G转入Ghead状态之后,首先会被放入本地P的自由G队列,而在运行时系统需要用自由G封装go函数的时候,也会先尝试从本地P的自由G队列中获取

如果本地P的自由G队列空了,那么运行时系统就会先从调度器的自由G队列转移一部分G到前者中

而当本地P的自由G队列已满,运行时系统也会把前者中的自由G转移一些给调度器的自由G队列

调度器的自由G列表有两个。它们的区别就是其中存放的自由G是有栈的还是无栈的

  • 在把G放入自由G列表之前,运行时系统会检查该G的栈空间是否为初始大小
  • 如果不是,就释放它,让该G变成无栈的,主要是为了节约资源
  • 另一方面,在从自由G列表取出G之后,运行时系统会检查它是否拥有栈,如果没有就初始化一个新的栈给它

M与P的非全局容器

与M和P相关的的非全局容器分别是调度器的空闲M列表和调度器的空闲P列表,这两个列表都用于存储暂时不被使用的元素实例

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

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

相关文章

LLM 大模型入门笔记-Tokenizer

下图展示了完整的 tokenization 流程,接下来会对每个步骤做进一步的介绍。 tokenizer_pipeline 1. Normalization normalize 其实就是根据不同的需要对文本数据做一下清洗工作,以英文文本为例可以包括删除不必要的空白、小写和/或删除重音符号。 代码…

《概率论与数理统计》期末复习笔记_下

目录 第4章 随机变量的数字特征 4.1 数学期望 4.2 方差 4.3 常见分布的期望与方差 4.4 协方差与相关系教 第5章 大数定律和中心极限定理 5.1 大数定律 5.2 中心极限定理 第6章 样本与抽样分布 6.1 数理统汁的基本概念 6.2 抽样分布 6.2.1 卡方分布 6.2.2 t分布 6.…

Winform使用HttpClient调用WebApi的基本用法

Winform程序调用WebApi的方式有很多,本文学习并记录采用HttpClient调用基于GET、POST请求的WebApi的基本方式。WebApi使用之前编写的检索环境检测数据的接口,如下图所示。 调用基于GET请求的无参数WebApi 创建HttpClient实例后调用GetStringAsync函数获…

数学之美:SQL语句的编译与关系代数

引言 当年读书的时候,真正学到数据库的操作之前,先学的内容是关系代数运算,以及相关的关系代数的定律。然后知道了当前比较主流的数据库都是关系型数据库,其底层依赖的是关系代数。 但是,当年考试的时候,…

【C语言】C语言-体育彩票的模拟生成和兑奖(源码+论文)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

研导智能科技——AI辅助科研产品开发

人工智能(AI)技术的飞速发展为科研领域带来了革命性的变化。本公司致力于开发基于人工智能的科研辅助产品,旨在通过智能化手段提高科研人员的工作效率和研究质量。目前,我们成功开发了研导学术平台(www.zhiyanxueshu.c…

Clickhouse启动失败定位

Clickhouse启动失败定位 1. 定位问题 查看状态 systemctl status clickhouse-server2. 查看日志 在这里插入代码片3. 发现是磁盘不够,进一步查看磁盘信息 df -h 目录4. 查看目录存储信息 du -h --max-depth1 /data/clickhouse5. 进行磁盘清理

VMware每次打开网络设置都出现需要运行NetworkManager问题

每次打开都出现这个情况,是因为之前把NetworkManager服务服务关闭,重新输入命令: sudo systemctl start NetworkManager.service或者 sudo service network-manager restart 即可解决,但是每次开机重启都要打开就很麻烦&#xf…

Webpack: 构建 NPM Library

概述 虽然 Webpack 多数情况下被用于构建 Web 应用,但与 Rollup、Snowpack 等工具类似,Webpack 同样具有完备的构建 NPM 库的能力。与一般场景相比,构建 NPM 库时需要注意: 正确导出模块内容;不要将第三方包打包进产…

面了英伟达算法岗,被疯狂拷打。。。

节前,我们组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对大模型技术趋势、算法项目落地经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了深入的讨论。 总结链接如…

Web Based Quiz System v1.0 SQL 注入漏洞(CVE-2022-32991)

前言 CVE-2022-32991 是一个影响 Web Based Quiz System v1.0 的 SQL 注入漏洞。这个漏洞存在于 welcome.php 文件中的 eid 参数处。攻击者可以通过此漏洞在数据库中执行任意 SQL 语句,从而获取、修改或删除数据库中的数据。 具体细节如下: 攻击向量&…

Websocket解析及用法(封装一个通用订阅发布主题的webSocket类)

1、什么是WebSocket? websocket的目标是通过一个长连接实现与服务器全双工,双向的通信。是一种在单个TCP连接上进行全双工通信的协议,使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 js中创建websocket…

改机软件有哪些?实现一键新机、改串号、改IMEI和手机参数的需求 硬改手机软件,新机环境模拟 设备伪装,一键改机,一键复原

这次针对可以直接开端口修改参数的机型做一些工具解析 前面接触合作过很多工作室。其中很多工作室对于各自软件的跳验证有各自的需求。 一个机型各项参数一般有IMEI WiFi 蓝牙 sn psb ESN等等。 针对这些参数的修改首先要明白各自软件检测的具体是哪些参数来验证。 对于常用…

解决IDEA的Web项目右键无法创建Servlet问题

右键新建没有servlet? 在pom.xml文件中需要导入servlet依赖,很简单的,别担心,就20秒解决 看我操作!!! 1. 找到自动生成的pom.xml文件 只要你创建了maven项目,就会自动生成pom.xml文件&#xf…

基于Java废物回收机构管理系统详细设计和实现(源码+LW+调试文档+讲解等)

💗博主介绍:✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,…

python多继承的3C算法

python多继承的3C算法 有很多地方都说python多继承的继承顺序,是按照深度遍历的方式,其实python多继承顺序的算法,不是严格意义上的深度遍历,而是基于深度遍历基础上优化出一种叫3C算法 python多继承的深度遍历 class C:def ru…

Solidworke学习(齿轮绘画)

目录 一、齿轮的基础理论 二、齿轮啮合传动的条件 三、传送比 四、绘画齿轮的步骤 五、绘画齿数小的齿轮 学习链接:徒手画齿轮配合,solidworks超简单3D打印齿轮画法_哔哩哔哩_bilibili 一、齿轮的基础理论 齿轮的啮合通过渐开线之间的互相挤压实现…

【C++】C++ 超市会员卡管理系统(面向对象)(源码+数据)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

VRay是什么?有什么特点?渲染100邀请码1a12

Vray是由Chaos Group开发的高性能渲染引擎,能为不同的三维建模软件提供图像和动画渲染服务,它有以下几个特点。 1、Vray采用了先进的光线追踪技术,能够模拟真实世界中光线的传播和反射,生成的图像和动画十分逼真。 2、Vray提供了…

【C++】 ——【模板初阶】——基础详解

目录 1. 泛型编程 1.1 泛型编程的概念 1.2 泛型编程的历史与发展 1.3 泛型编程的优势 1.4 泛型编程的挑战 2. 函数模板 2.1 函数模板概念 2.2 函数模板格式 2.3 函数模板的原理 2.4 函数模板的实例化 2.5 模板参数的匹配原则 2.6 函数模板的特化 2.7 函数模板的使…