自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(9)
  • 收藏
  • 关注

原创 Go垃圾回收初探

每个对象都包含一个引用计数,每当其他对象引用了此对象时,引用技术+1,反之,取消引用后,引用计数-1,一旦引用计数为0,表明该对象为垃圾对象,需要被回收。标记-压缩分为标记与压缩两个阶段,在压缩阶段,需要扫描活着的对象并将其压缩到空闲的区域,这可以保证压缩后的空间更紧凑,从而解决内存碎片问题。同时,压缩后的空间能以更快的速度查找到空闲的内存区域。这种算法的重要前提是:死去的对象一般都是新创建不就的,因此,没有必要反复地扫描旧对象,这大概率会加快垃圾回收的速度,提高处理能力和吞吐量,减少程序暂停的时间。

2024-08-04 11:23:29 247

原创 Go栈内存管理

1、要分配栈内存时,对于小于32KB的栈空间,比如8KB,会优先使用当前P的本地缓存,如果对应规则的内存块链表为空,就从stackpool这里分配16KB的内存放到本地缓存stackcache中,然后继续从本地缓存分配,若是stackpool中对应的链表也为空,就从堆内存直接分配一个32KB的span,划分成对应的内存块大小放到stackpool中。唯一发起栈收缩的地方就是GC,GC通过scanstack函数,寻找标记root节点时,如果发现可以安全的收缩栈,就会执行栈收缩。这些栈释放到了哪里?

2024-08-04 02:23:54 332

原创 GO堆内存管理

如果不够分配,就从当前P的mcache种找到对应的mspan重新拿一个16字节大小的内存块过来用,如果本地缓存中响应规格的mspan也没有空间了,就会从mcentral中拿一个新的mspan过来,分配完以后,如果新拿过来的内存块剩余空间比旧内存块的剩余空间还大,那就用新的内存块把旧的tiny替换掉。heapArena.bitmap:用1位标记这个arena中一个指针大小的内存单元是标量还是指针(0代表标量,1代表指针),再用1位来标记这块内存空间的后续单元是否包含指针(0终止,不包含,1扫描,包含)。

2024-08-04 01:12:39 753

原创 Redis源码组成

2、Redis数据类型的底层实现。4、Redis服务端和客户端实现。3、Redis数据库的实现。

2024-06-17 16:30:17 197

原创 Go编译器初步探索

2、语法解析:Go语言采用了标准的自上而下的递归下降(Top-Down Recursive-Descent)算法,以简单高效的方式完成无须回溯的语法扫描,核心算法位于syntax/nodes.go及syntax/parser.go中。源文件中的每一种声明都有对应的语法,递归下降通过识别初始的标识符,例如_const,采用对应的语法进行解析。1、词法解析:词法阶段Go语言编译器会扫描输入的Go源文件,并将其符号(token)化,符号定义在syntax/token.go中。

2024-06-17 16:19:21 117

原创 DMA(Direct Memory Access)

DMA中也有CPU(DMA数据传输需要使用CPU,只不过这里使用的CPU不是计算机里面所有进程共享的CPU,而是由另外一个CPU来负责数据传输。这个另外的CPU就是DMA控制器) 只不过里面的CPU可以比通用CPU简单,且价格便宜很多,它只需要能够以不慢于I/O设备的速度进行数据读写即可。将数据从一个地址空间复制到另一个地址空间,提供在外设和存储之间或者存储器和存储器之间的高度数据传输。无需CPU的干预,通过DMA数据可以快速地移动,这样节省了CPU的资源。

2024-06-17 10:45:25 503

原创 Btrfs

文件系统允许你的 PC 去寻找存储在磁盘上的数据。这听起来像是微不足道的工作,但实际上时至今日各种类型的非易失性存储设备(比如机械硬盘、固态硬盘、SD 卡等等)仍然与 1970 年代 PC 被发明时基本相同:一个(巨大的)存储块集合。块(Block)” 是最小的可寻址存储单元。PC 上的每个文件内容被存储在多个块中。一个块通常是 4096 字节的大小。这取决于你的硬件和在这之上的软件(即文件系统)。文件系统允许我们从海量的存储块中查找文件的内容,这是通过所谓的inode去实现的。

2024-06-14 12:12:25 1207

原创 Linux存储系统概述

内存在这个过程中扮演了一个磁盘缓存的角色,把上下两个部分隔离成异步运行的两个过程,对上半部分来说,让数据一直留在内存中是最好的方式,因为没有办法预料到之后还会不会修改,如果需要对同一个位置频繁地进行修改,则与磁盘进行不断地数据同步是没有必要的。例如,堆不存在相对应的磁盘路径,所以它的映射就称为匿名的内存映射(注意一下最后一个[anon]区域,它的地址在内核地址空间,这是VDSO(Virtual Dynamic Shared Object)技术的应用,相当于将一个内核动态库共享给应用进程);

2024-06-14 11:35:41 1414 1

原创 网络存储技术

主机通过SCSI控制器与SCSI设备相连,通常把发起SCSI数据存储的一端叫作Initiator,而把存储数据的SCSI设备叫作Target。主机通过控制器与Target相连,而Target也可以通过SCSI总线与其他的SCSI设备相连,在SCSI总线的末端一般都会连接一个终结器,用来减少相互影响的信号,维持SCSI链上的电压恒定。4)iSCSI:为了降低使用SAN的成本,可以利用普通的数据网络来传输SCSI数据,实现和SAN相似的功能,同时系统的灵活性也得到了提高。

2024-06-13 18:03:32 239

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除