首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
大yaoyao
掘友等级
软件开发
获得徽章 0
动态
文章
专栏
沸点
收藏集
关注
作品
赞
40
文章 40
沸点 0
赞
40
返回
|
搜索文章
赞
文章( 40 )
沸点( 0 )
揭开defer的面纱
在1.12版本使用的是堆分配,1.13版本加入栈分配,现在1.14版本又加入开放源码,可以看到堆分配是最后的兜底方案。现在我们会来介绍每一种方案。 声明defer关键字处使用deferproc() 注册defer处理函数,将对应的_defer结构体值拷贝到堆上。 对于新创建好的…
零基础了解Docker架构
本文会讲到docker的整体框架和基本原理。以及最主要的镜像(是什么,怎么构建),容器(是什么,怎么运行),在最后说一下容器都有哪些优点。容器基础网络已经在之前的文章分享过,有兴趣的可以查看。https://juejin.cn/post/6904201044390051848 …
Docker数据卷的2种存储方式
docker提供2种方法对数据卷进行存储。 1、bind mount 2、docker管理数据卷 使用-v 关键字标识容器数据挂载路径。这里一定要指定宿主机地址和容器地址。 可以看到,bind mount的使用十分的简单和高效。但是也可以看到有很大的不灵活性,因为挂载的时候需要…
Go 内存管理(一)TCMalloc内存管理原理
TCMalloc(Thread Cache Malloc)是线程级别的内存管理模式。 2、减少锁竞争。对于小对象,只有在对应线程分配的空闲块不足的时候,才会使用到锁;对于大对象,TCMalloc尝试使用有效的自旋锁 总结来说就是:最大化内存使用率,最小化分配时间。 基本把这张图…
Go内存管理(二)Go内存管理原理
Golang的内存管理的核心思想就是完成类似预分配、内存池等操作,以避开系统调用带来的性能问题,防止每次分配内存都需要系统调用。 mheap向虚拟内存申请的最小单位。一般为8KB 为了减少内存碎片,将span的大小分级。目前分为0-66级共67级。可以看到class=0是没有使…
Go内存管理(三) 源码分析
我们理解源码的流程就非常easy啦。 首先来看一下,mcache,mcentral,mheap这三个结构体。我们选则最长使用的字段进行分析。注:这里都是基于go1.14源码分析(对照代码看体验更佳 接下来我们按照Tiny对象,小对象,大对象分类来介绍内存分配的流程。 0、对象的…
Go内存管理(四)什么情况下变量分配到堆中
栈内存:一般由系统申请和释放。比如函数的入参、局部变量、返回值等 堆内存:一般由程序员申请和释放(malloc/free new/delete等)。使用malloc关键字申请的内存就在堆内存,申请和释放要成对使用,否则会造成内存泄漏。对于Golang系统会自动回收已经不使用的堆…
Go内存原理(五)-GC原理
前几章我们学习了Golang内存管理的基本原理(还不清楚内存管理的童鞋请移步看内存管理系列)。现在我们来看GC的基本原理是什么? 在三色标记中,减少了STW的时间。我们知道在三色标记中,增加了中间状态-灰色状态,这可以允许标记与用户代码并行执行,这里是怎么做到的呢,是因为三色标…
Go内存原理(六)-GC源码分析
GC会扫描哪些地方存有指针,首先变量要么分配到栈中,要么分配在在堆中。我们在之前的Go语言内存管理章节中学习到了堆对应的bitmap每2bit会指出arena哪些地址存储了对象,对象是否包含指针;还有我们的mcentral中,也会分为包含指针的span(noscan),不包含指…
从一个Go案例来了解僵尸进程
同时我们查看进程的相关信息,打印进程的状态、父进程、子进程以及运行命令。分析如下: 到这里,我想大家对僵尸进程已经有一定的概念。一个进程创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称…
下一页
关注了
3
关注者
1
收藏集
1
关注标签
4
加入于
2020-10-15