当前位置: 首页 > news >正文

golang语言本身设计点总结

本文参考

1.golang的内存管理分配

golang的内存分配仿造Google公司的内存分配方法TCmalloc算法;她会把将内存请求分为两类,大对象请求和小对象请求,大对象为>=32K的对象。
在了解golang的内存分配之前要知道什么事虚拟内存,虚拟内存是把磁盘作为全局大内存进行管理,内存是磁盘数据的高数缓存区。操作系统内存管理的基本单位是page,页。文章说的内存哦都市虚拟内存。TCmalloc中span是内存管理的基本单位,他是一连续的page组成,golang也是如此。根据不同作用的span就有不同的span的划分,主要说的三部分:
ThreadCache:线程独有的,不能共享,用于小对象的分配(golang里 main叫mCache)
CentralCache:用于小对象的分配,线程之间可以共享了,当ThreadCache内存不够时会从这里进行申请分配,ThreadCache内存超过阈值进行内存回收时会归还给centralCache。(在golang里面叫mCentral)
page heap:用于大对象的分配,线程之间分配,当centralcache内存不足就回从pageheap申请一个span。(golang里叫mheap)

2gotoutine的实现原理:

参考

答:线程是CPU执行调度的最小单位,goroutine是可以说是一种线程的执行流的结构格式,他是由MPG理论三个部分组成
M:是实在运行的内核线程
P:代表processer,go局部代码的调度器,用来调度协程goroutine,维护上下文,go里可以有多个,可通过 GOMAXPROCS()来设置,默认为核心数
G:代表一个goroutine,它有自己的栈,启动一个goroutine很容易:go function 就行,所以每有一个go语句被执行,
runqueue队列就在其末尾加入一个

在这里插入图片描述

3.锁mutex的两种模式(正常模式和1.9版本之后引入的优化模式-饥饿模式)

饥饿模式目的是保证互斥锁的公平性,防止协程饿死
mutex的结构体又个字端叫state,state=1表示加了锁。当state=0的时候表示可以进行抢锁。正常模式下,等待队列中的第一个协程会和自旋状态的协程(没放进等待队列的协程)进行抢锁,一般都是自旋的协程抢到先,就回造成等到队列的饿死状态,永远等不到。饥饿模式,就是严格的先进先出。但是两种可以相互切换的。
什么时机正常模式切饥饿模式:
当一个Goroutine为了获取锁等待的时间超过了1ms
什么时机饥饿切换正常模式:
1.获得锁的协程等待时间小于1ms
2.等待队列为空

4.在GMP模型中Goroutine有几种状态

在这里插入图片描述
idle:空闲状态,刚刚被分配并且还没有被初始化
runnable:没有执行代码,没有栈的所有权,存储在运行队列中(等待被调度)
running:正在运行。可以执行代码,拥有栈的所有权,被赋予了内核线程M和处理器
syscall:正在执行系统调用。拥有栈的所有权,没有执行用户代码,被赋予了内核线程M,但是不在运行队列上
waiting:运行时被阻塞。没有执行用户代码并且不在运行队列上,但是可能存在于channel的等待队列上
dead:没有被使用,没有执行代码,可能有分配的栈

5.什么是golang的热重启?

热重启要实现:旧版本的程序退出之前,需要重启新版本的,老版本可以继续处理没处理完的请求,新的请求打到新版本的上去。
原理是:信号+fork
1.父进程监听重启信号
2.父进程收到重启信号,调用fork()函数,创建子进程,传递子socket描述符给子进程
3.子进程收父进程的socket描述符,并监听scoket描述符,从而新的请求打到子进程
4.子进程启动完成后,父进程处理完旧的请求
5.父进程退出,子进程替代父进程。

相关文章:

golang语言本身设计点总结

本文参考 1.golang的内存管理分配 golang的内存分配仿造Google公司的内存分配方法TCmalloc算法;她会把将内存请求分为两类,大对象请求和小对象请求,大对象为>32K的对象。 在了解golang的内存分配之前要知道什么事虚拟内存,虚拟内存是把磁盘作为全局…...

PTA L1-046 整除光棍(详解)

前言:内容包括四大模块:题目,代码实现,大致思路,代码解读 题目: 这里所谓的“光棍”,并不是指单身汪啦~ 说的是全部由1组成的数字,比如1、11、111、1111等。传说任何一个光棍都能被…...

将小程序代码转成uni-app代码

最近因为公司项目原因需要将小程序的项目转换成uni—app的项目,所以总结了以下几点: 首先你可以先到uni-app的官网简单看一下对它的介绍,本次文章的介绍是针对简单的微信小程序来进行的转化。 在这之前我们来看一下目录对比 下面就来介绍一下…...

C语言在游戏中播放音乐

使用 mciSendString 播放音乐 mciSendString 支持 mp3、wma、wav、mid 等多种媒体格式,使用非常简单。这里做一个简单的范例,用 mciSendString 函数播放 MP3 格式的音乐,代码如下: // 编译该范例前,请把 music.mp3 放…...

机器学习算法:随机森林

在经典机器学习中,随机森林一直是一种灵丹妙药类型的模型。 该模型很棒有几个原因: 与许多其他算法相比,需要较少的数据预处理,因此易于设置充当分类或回归模型不太容易过度拟合可以轻松计算特征重要性在本文[1]中,我想…...

如何做好多项目全生命周期的资源调配,提升资源利用效率?【橙子】

随着产品研发中心各团队承接的研发项目数量和规模日趋增加,人均产值和利润目标逐步提升,人均承接的项目数量也逐渐增加,目前缺乏合理的研发资源管理方案,存在多项目研发过程中资源冲突及部分项目研发人员忙闲不均等现象&#xff0…...

JVM - 内存分配

目录 JVM的简化架构和运行时数据区 JVM的简化架构 运行时数据区 PC寄存器 Java栈 Java堆 方法区 运行时常量池 本地方法栈 栈、堆、方法区交互关系 Java堆内存模型和分配 Java堆内存概述 Java堆的结构 对象的内存布局 对象的访问定位 Trace跟踪和Java堆的参数配…...

【知识图谱论文】Bi-Link:通过转换器和提示的对比学习桥接来自文本的归纳链接预测

文献题目:Bi-Link: Bridging Inductive Link Predictions from Text via Contrastive Learning of Transformers and Prompts发表期刊:WWW2023代码: https://anonymous.4open.science/r/Bi-Link-2277/. 摘要 归纳知识图的完成需要模型来理解…...

jieba+wordcloud 词云分析 202302 QCon 议题 TOP 关键词

效果图 步骤 (1)依赖 python 库 pip install jieba wordcloud数据 概览 $ head -n 5 input.txt 中国软件技术发展洞察和趋势预测报告 2023 QCon 大会内容策划思路 FinOps:从概念到落地 开源芯片的发展现状、机遇和未来 乐观者前行&#xff0…...

包管理工具-npm-npx-yarn-cnpm

代码共享方案 在我们通过模块化的方式将代码划分成一个个小的结构后,在以后的开发中我们就可以通过模块化的方式来封装自己的代码,并且封装成一个工具,这个工具我们可以让同事通过导入的方式来使用,甚至你可以分享给世界各地的程…...

go gin学习记录1

环境: MAC M1,Go 1.17.2,GoLand 默认执行指令的终端,如果没有特别说明,指的都是goland->Terminal 创建项目 Goland中新建项目,在$GOPATH/src/目录下建立t_gin项目。 进入项目,在goland的T…...

Docker常用命令

1:帮助命令docker versiondocker infodocker --help2:镜像命令docker images(列出本地主机上的镜像)各个选项说明:docker imagesREPOSITORY:表示镜docker images像的仓库源TAG:镜像的标签IMAGE ID&#xff…...

论文写作——公式编辑器、latex表格、颜色搭配器

1、公式编辑器(网页版mathtype可用于latex公式编辑): MathType demo - For DevelopersLive demonstration about the features of Mathtype which allows edition equations and formulas (PNG, flash, SVG, PDF, EPS), based on MathML and compatible with LaTeX.https:/…...

MySQL数据库12——视图(VIEW)

视图概念 视图是一个虚拟表,称其为虚拟表的原因是:视图内的数据并不属于视图本身,而属于创建视图时用到的基本表。可以认为,视图是一个表中的数据经过某种筛选后的显示方式;或者多个表中的数据经过连接筛选后的显示方…...

第四代英特尔至强重磅发布,芯片进入下半场:软硬加速、绿色可持续

编辑 | 宋慧 出品 | CSDN 云计算 2023 年的第二周,英特尔重磅发布其企业级芯片领域重要的产品——第四代英特尔 至强 可扩展处理器。作为数据中心处理器当之无愧的王牌产品,迄今为止,英特尔已经向全球客户交付了超8500万颗​至强可扩展处理器…...

c++-运算符函数与运算符重载

目录概述例子注意问题概述 运算符重载是函数一个特殊情况,重载的运算符视为特殊的函数,称为运算符函数。 编译系统能依据使用运算符的不同环境,即参数(操作数)的数量或类型的差异,区分同一运算符的不同含义…...

【MySQL Shell】8.9.3 修复 InnoDB ClusterSet 中的成员服务器和集群

根据集群的问题或维护要求,可以使用以下操作来处理其成员服务器。除非另有说明,否则请使用使用 InnoDB Cluster 管理员帐户或服务器配置帐户获取的 Cluster 和 ClusterSet 对象,以便存储在 ClusterSet 对象中的默认用户帐户具有正确的权限。 …...

宝塔搭建实战php开源likeadmin通用管理pc端nuxt3源码(三)

大家好啊,我是测评君,欢迎来到web测评。 昨天给大家分享了admin前端的搭建部署方式,今天来给大家分享pc端在本地搭建,与打包发布到宝塔的方法,希望能够帮助到大家,感兴趣的朋友可以自行下载学习。 技术架构…...

【C++】---Stack和Queue的用法及其模拟实现

文章目录Stack最小栈栈的弹出压入序列逆波兰表达式求值用栈实现队列模拟实现queue用队列实现栈模拟实现Stack stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。它的使用和之前学习的ve…...

Python GUI编程

Python 提供了多个图形开发界面的库,几个常用 Python GUI 库如下: Tkinter: Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多数的 Unix 平台下使用,同样可以应用在 Windows 和 Macintosh 系统里。Tk8…...

手把手教你配置Synopsys DesignWare PCIe控制器:从寄存器读写到ATU映射实战

Synopsys DesignWare PCIe控制器深度配置指南:从寄存器操作到DMA通信实战 1. PCIe控制器基础架构解析 Synopsys DesignWare PCIe控制器作为业界广泛采用的IP核,其架构设计充分考虑了灵活性和可扩展性。控制器核心由以下几个关键模块组成: Tra…...

中小项目如何通过按token计费模式灵活启动AI功能

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 中小项目如何通过按token计费模式灵活启动AI功能 对于预算有限的中小项目团队而言,在探索产品方向、验证市场需求的早期…...

让 Agent 也能发邮件:Cloudflare Email Service 正式公测

原文:Cloudflare Email Service: now in public beta. Ready for your agents 邮件是世界上最通用的接口 不需要下载特定 App,不需要接入自定义 SDK,不需要注册新平台。全球几十亿人都有邮箱,任何人都可以通过一封邮件和你的应用…...

从FPGA工程师的视角看AMBA总线:手把手教你用Verilog实现一个简易APB外设

从FPGA工程师的视角看AMBA总线:手把手教你用Verilog实现一个简易APB外设 在FPGA和数字IC设计领域,AMBA总线协议就像城市中的交通网络,负责协调各个功能模块之间的数据流动。而APB(Advanced Peripheral Bus)作为AMBA家族…...

AI和大模型——拟合

一、拟合 Fitting,中文翻译成拟合,这个翻译还是比较贴切的。怎么理解拟合呢?其实非常好理解,如果接受过九年义务教育,基本都有极限或微积分的概念。有没有想起过积分中用高低不等的小矩形来拼凑出曲线面的面积,那个过程…...

解放双手:D3KeyHelper让暗黑3游戏操作变得前所未有的简单

解放双手:D3KeyHelper让暗黑3游戏操作变得前所未有的简单 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面,可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper 还在为暗黑3中繁琐的技能循环和…...

告别手动配网!用IEEE 1905.1协议实现Wi-Fi AP自动配置的保姆级流程拆解

告别手动配网!用IEEE 1905.1协议实现Wi-Fi AP自动配置的保姆级流程拆解 想象一下,当你需要为三层别墅部署全屋Wi-Fi覆盖,或是为小型办公室搭建多AP无线网络时,传统方式需要逐个登录每个AP的后台,重复输入SSID、密码、…...

基于Ollama与OpenClaw框架,在Ubuntu VPS上部署私有AI助手

1. 项目概述与核心价值最近在折腾一个挺有意思的东西,叫OpenClaw。简单来说,它是一个开源的AI智能体(Agent)框架,能让你自己部署一个功能丰富的AI助手。这玩意儿最吸引我的地方在于,它能和本地的Ollama大语…...

5分钟掌握FanControl:Windows风扇控制的终极免费解决方案

5分钟掌握FanControl:Windows风扇控制的终极免费解决方案 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending…...

2026年全国优质化妆培训机构深度盘点

颜值经济持续升温背景下,2026年化妆行业迎来规范化、专业化发展新阶段,涵盖影视、时尚、婚庆等多个领域,市场对专业化妆人才的需求持续攀升。据相关行业数据显示,2026年美业职业培训市场预计保持11%以上增速,美业门店专…...