golang语言本身设计点总结

news2024/9/22 23:29:43

本文参考

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.父进程退出,子进程替代父进程。

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

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

相关文章

设计模式之工厂模式详解和应用

目录1 工厂模式的历史由来2.简单工厂模式2.1 简单工厂模式定义2.2 简单工厂模式案例2.3 简单工厂模式相关源码2.4 简单工厂模式优缺点3 工厂方法模式3.1 工厂方法模式定义3.2 工厂方法模式案例3.3 工厂方法模式源码3.4 工厂方法模式优缺点4 抽象工厂模式4.1 抽象工厂模式定义4.…

【项目】基于SpringBoot+Freemarker+Mybatis+MySQL+LayUI实现CRM智能办公系统

这里写目录标题CRM基本概念CRM分类模块功能描述项目代码application-dev.yml部分页面代码CRM基本概念 圈内存在这么一句话:“世上本来没有 CRM,大家的生意越来越难做了,才有了 CRM。” 在同质化竞争时代,顾客资产尤为重要&#x…

CUDA流入门|参加CUDA线上训练营

CUDA 流的概念 CUDA流在加速应用程序方面起到重要的作用,他表示一个GPU的操作队列操作在队列中按照一定的顺序执行,也可以向流中添加一定的操作如核函数的启动、内存的复制、事件的启动和结束等,添加的顺序也就是执行的顺序一个流中的不同操…

SQLi-LABS-Challenges 0~28a解析

Less-1 GET-Error based - Single quotes - String 成功payload 1 union select 1,database(),user()%23 1 and 12 union select user(),1,database()-- 经测试 输出时会输出 3 列,所以此处 union select 需 select 三个数据 * 1‘ order by 4--时会报错&#…

OpenHarmony使用Socket实现一个TCP服务端详解

点击获取BearPi-HM_Nano源码 ,以D4_iot_tcp_server为例: 点击查看:上一篇关于socket udp实现的解析 查看 TCPServerTask 方法实现: static void TCPServerTask(void) {//连接WifiWifiConnect("TP-LINK_65A8",

场测|新能源整车通信功能性能,新能源整车环中国测试,整车2345G及bt,wifi测试

一套全新的用于测试车载通信功能的标准Verson.DH2.0.0 目的: 检测出不同平台、芯片及硬件配置的间的差异,找到凌驾于法规之上好产品配置。开创出行业领先的测试标准,并联合相关部门将地方标准升级成国家标准。推动行业产品的迭代将客户的用…

Ajax 学习笔记

一、Ajax1.1 什么是AjaxAJAX Asynchronous JavaScript and XML(异步的JavaScript和XML)。Ajax是一种在无需加载整个网页的情况下,能够更新部分网页的技术,它不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的Web应用程序的技术…

VSCODE C++ 调用matplotlibcpp画图

使用VSCODE编写C程序,想在调试过程中看中间数据的波形,于是找到了python的matplotlibcpp库,参考文章链接是:https://blog.csdn.net/weixin_43769166/article/details/118365416;按照他的步骤配置好之后,跳出…

《爆肝整理》保姆级系列教程python接口自动化(十三)--cookie绕过验证码登录(详解

python接口自动化(十三)--cookie绕过验证码登录(详解 简介 有些登录的接口会有验证码:短信验证码,图形验证码等,这种登录的话验证码参数可以从后台获取的(或者查数据库最直接)。获取…

Linux服务器clang-13安装(环境变量配置)

1.从llvm的github网址选择合适的release合适的运行平台进行下载,下载官方预编译的二进制压缩包。 2.将下载好的压缩包进行本地上传。 使用scp命令进行上传 scp -r -P 端口号 本地文件路径 服务器ID等:服务器上目标地址 3.解压(tar命令) 4.环境变量配…

测试开发之Django实战示例 第八章 管理支付与订单

第八章 管理支付与订单上一章制作了一个带有商品品类展示和购物车功能的电商网站雏形,同时也学到了如何使用Celery给项目增加异步任务。本章将学习为网站集成支付网关以让用户通过信用卡付款,还将为管理后台扩展两项功能:将数据导出为CSV以及…

旋转框目标检测mmrotate v1.0.0rc1 之RTMDet训练DOTA(二)

1、模型rotated_rtmdet的论文链接与配置文件注意:我们按照 DOTA 评测服务器的最新指标,原来的 voc 格式 mAP 现在是 mAP50。IN表示ImageNet预训练,COCO表示COCO预训练。与报告不同的是,这里的推理速度是在 NVIDIA 2080Ti GPU 上测…

国外客户只想跟工厂合作?可以这样破解

1.客户是愿意和外贸公司合作还是更愿意和工厂合作?一个外贸公司的朋友说:“我去工厂接待过七八次外国人,基本上都是英国、德国、日本、加拿大、美国的。”贸易公司根本不避讳自己是贸易公司,外国人也不在乎。他们更关心的是贸易公司能否妥善安…

十五载厚积薄发,电信级分布式数据库是这样炼成

所在论坛:数据库技术创新&云原生论坛 分享时段:2.18 10:00-10:30 分享主题:大规模并行处理:AntDB分布式演进之路 分享嘉宾:沈夺,亚信科技AntDB数据库内核开发工程师 由中国开源软件推进联盟Postgre…

JFET(结型场效应管)

JFET的结构示意图 参考:https://blog.csdn.net/weixin_45882303/article/details/106008695 下图是实际结构图, 下面是原理图和符号表示(参考连接中的图片) 分析 VGS 对电压id的控制(固定VDS) 当让D和…

华为OD机试 - 箱子之字形摆放(Python)| 核心知识点 + 代码编写思路

箱子之字形摆放 题目 有一批箱子(形式为字符串,设为str), 要求将这批箱子按从上到下以之字形的顺序摆放在宽度为 n 的空地,请输出箱子的摆放位置。 例如:箱子ABCDEFG,空地宽度为3,摆放结果如图: 则输出结果为: AFG BE CD 输入 输入一行字符串,通过空格分隔,前面…

别具一格,原创唯美浪漫情人节表白专辑,(复制就可用)(html5,css3,svg)表白爱心代码(3)

别具一格,原创唯美浪漫情人节表白专辑, (复制就可用)(html5,css3,svg)表白爱心代码(3) 目录 款式三:心形实时显示认识多长时间桃花飞舞(猫咪)款 1、拷贝完整源代码 2、拷贝完整js代码 3、修改时间 4、…

深入浅出带你学习shiro-550漏洞

//发点去年存货 前言 apache shiro是一个java安全框架,作用是提供身份验证,Apache Shiro框架提供了一个Rememberme的功能,存储在cookie里面的Key里面,攻击者可以使用Shiro的默认密钥构造恶意序列化对象进行编码来伪造用户的 Cookie&#xf…

一起学习用Verilog在FPGA上实现CNN----(七)全连接层设计

1 全连接层设计 1.1 Layer 进行线性计算的单元layer,原理图如图所示: 1.2 processingElement Layer中的线性计算单元processingElement,原理图如图所示: processingElement模块展开原理图,如图所示,包含…

Transformation(转换算子)

分布式代码的分析 启动spark程序的代码 在yarn中启动(没有配置环境变量) /export/server/spark/bin/spark-submit --master yarn --num-executors 6 /root/helloword.py # 配置环境变量 spark-submit --master yarn --num-executors 6 /root/helloword.py RDD的五大特征 1、…