
io
文章平均质量分 74
动态一时爽,重构火葬场
这个作者很懒,什么都没留下…
展开
-
本地缓存少更改、小数据、低一致表的思考
对于那些少更改、小数据的表,以及对一致性要求不高的业务,其实完全可以通过本地缓存将表数据缓存到本地内存中,然后通过定时机制拉取表更新数据直接从内存中获取数据,将会使得查询性能得到巨大的提升,并且由于更改少,数据量小,同时内存压力也不会很大,除了一致性不高外,完全是利大于弊的策略那么如果我想设计这样的本地缓存,该如何进行呢?原创 2024-10-21 23:53:35 · 472 阅读 · 0 评论 -
Golang栈空间管理
连续栈核心原理是当当前栈内存不足时,会触发中断,从而分配更大充足的栈空间,并迁移原栈内容到新栈。此外,除了扩容,连续栈还会在已使用的栈空间未超过了总可用空间的四分之一,将新栈收缩到原来的一半。在Go1.3之前,所有goroutine在初始化时都会分配一块固定大小的内存空间。分段栈能够按需为当前goroutine分配内存,并及时减少内存占用,但。迁移过程会被指针也同样迁移过来,不过没关系根据逃逸分析不变性——,所以指向栈中变量的指针只能在栈上。与堆类似,栈也有全局和局部栈空间。原创 2024-07-05 20:30:00 · 369 阅读 · 0 评论 -
Go堆内存管理
heapArena: heapArena 是由 mheap 管理的更小的内存块。按 Span class 对 Span 分类,串联成链表,当 mcache 的某个级别 Span 的内存被分配光时,它会向 mcentral 申请 1 个当前级别的 Span。微分配器将多个微小块分配请求合并到同一个内存块中,只有当内存块中的所有对象都需要被回收时,整片内存才可能被回收。mcache: 每个P所有的cache,包含多个空闲内存块链表,不同的链表上的内存块大小可能是不相同的。Go按照不同对象大小有不同的分配逻辑。原创 2024-07-05 14:48:04 · 899 阅读 · 0 评论 -
go内存返还系统相关代码
在go中内存返还系统相关代码主要由sysUnusedOS实现在Linux中默认是通过madvice方法的_MADV_FREE进行释放,在这种释放中内存其实是被延迟回收的。sysUnusedOS被scavengeOne调用,scavengeOne在给定的内存块(chunk)中搜索可回收的连续页面,并尝试回收指定数量的内存值得注意的是,在回收之后内存还是可以再次分配的scavengeOne继而被scavenge调用该过程分块进行,从最高地址开始,一直持续到清除指定字节数(nbytes)或耗尽堆。原创 2024-07-05 21:00:00 · 861 阅读 · 0 评论 -
Linux文件数据写入
结构体fdfd也就是文件描述符,用于标识已经打开的文件、管道、socket等。是进程和内核的桥梁,允许进程执行各种文件操作struct fd { struct file *file; unsigned int flags;};fileLinux内核中表示打开文件的结构体,包含了文件操作所需的各种信息和元数据。这是文件系统操作的核心结构之一,允许内核跟踪每个打开的文件及其相关的状态。struct file { // 用于链接或者引用计数 union { // 链表节点原创 2024-07-02 22:45:00 · 1609 阅读 · 0 评论 -
Linux硬链接、软链接
硬链接是一个目录条目(在基于目录的文件系统中),它将一个名称与一个文件关联起来。因此,每个文件必须至少有一个硬链接。为文件创建额外的硬链接可以使该文件的内容可以通过额外的路径访问(即通过不同的名称或在不同的目录中)这会导致别名效应(alias effect):进程可以通过任意路径打开文件并修改其内容。相比之下,文件的软链接或“快捷方式”不是指向数据本身的直接链接,而是指向一个硬链接或另一个软链接的引用。在我看来硬链接可以理解为数据的指针,而软链接则是指针的指针。原创 2023-09-20 23:40:33 · 472 阅读 · 0 评论 -
ZFS了解
存储数据的管理通常涉及两个方面:对一个或多个块存储设备(如硬盘驱动器和SD卡)进行物理卷管理,并将它们组织成操作系统所看到的逻辑块设备(通常涉及卷管理器、RAID控制器、阵列管理器或合适的设备驱动程序),以及对存储在这些逻辑块设备(文件系统或其他数据存储)上的数据和文件进行管理。与其他文件系统不同的是zfs充当着卷管理和文件系统的角色,这意味着ZFS可以创建一个跨越池和硬盘的文件系统,可以通过添加硬盘来增大池的存储容量zpool是支撑zfs的最高层结构,由vdev组成存储vdev。原创 2023-09-08 23:39:49 · 1516 阅读 · 0 评论 -
Virtual File System了解
虚拟文件系统(以下简称vfs)是置于具体文件系统之上的抽象层,指定内核和具体文件系统的接口。允许client以统一方式访问不同的具体文件系统。比如可以通过VFS透明访问本地硬盘和网络设备就像在同一个设备访问一样。原创 2023-09-07 23:07:34 · 293 阅读 · 0 评论 -
docker镜像是如何导入的?
镜像导入是由image/tarexport/load.go#tarexporter.Load()完成的以下代码参考github.com/docker/docker版本v0.0.0-20181129155816-baab736a3649主要是注册镜像信息以及解包镜像tar流到新root导出和保存的区别在于这意味着导出将不会包含USER、EXPOSE等Dockerfile里面的命令,也就无法转移镜像到另一台机器上了。原创 2023-09-02 23:04:27 · 1283 阅读 · 0 评论 -
FUSE简单了解
FUSE(filesystem in userspace)是一个用户态文件系统框架。由内核模块(fuse.ko)、用户态库(libfuse.*)和挂载工具组成(fusermount)其中内核fuse.ko用于承接vfs下来的IO请求,封装成FUSE数据包转发给用户态中libfuse进行解析转给hello程序。文件系统通常工作在内核态,而fuse允许文件系统在用户态实现,这使得文件系统实现更加灵活。对于挂载hello程序实现的fuse在/tmp/fuse,执行。但内核态文件系统还是有很多优点。原创 2023-08-22 17:15:54 · 1054 阅读 · 0 评论 -
Swap机制
Swap机制是将物理内存页复制到预先配置的硬盘空间,从而释放物理内存。还有就是在由ACPI定义的S4睡眠状态,将机器状态保存到swap空间并完全关闭机器。当机器上电时,状态恢复。在此之前,电力消耗为零。包含其会在分配内存困难时触发,也就意味着并不是内存满了之后才有swapswap类型有。原创 2023-08-14 16:05:38 · 201 阅读 · 0 评论 -
如何保障CPU缓存一致性?
该操作可以是缓存块的刷新或失效。因此,每当CPU需要读取缓存行时,它首先扫描自己的存储缓冲区中是否存在同一行,因为有可能同一行之前由同一CPU写入,但尚未写入缓存(之前的写入仍然在存储缓冲区中等待)。请注意,与存储缓冲区不同,CPU不能扫描无效队列,因为CPU和无效队列物理上位于缓存的两侧,那么这样就有可能读到原本无效的缓存行了。当写操作继续进行时,CPU发出一条读无效消息(因此有问题的缓存行和存储该内存地址的所有其他CPU的缓存行都是无效的),然后将写操作推入存储缓冲区,当缓存行最终到达缓存时执行。原创 2023-07-15 16:20:14 · 231 阅读 · 0 评论 -
LZ77压缩算法
读取前向缓冲区数据在搜索缓冲区进行匹配若匹配到,则编码相同字符序列到当前字符偏移量以及长度若未匹配到则直接放入原数据原创 2023-03-09 16:22:39 · 273 阅读 · 0 评论 -
Log Structure Merge Tree
LSM是一种基于日志追加写的数据结构,非常适合为具有高写入数据提供索引访问LSM基于以下前提。原创 2023-03-06 16:48:51 · 454 阅读 · 0 评论 -
Linux epoll
大概流程是epoll维护了储存需要监听socket的红黑树,以及就绪socket链表。当有socket数据过来时,加入该socket到就绪socket链表,然后进程遍历对应的就绪socket链表。但每次调用select都要将进程加入所有要监听的socket等待队列,每次唤醒都要从所有队列移除,而且要知道哪个socket收到了数据还要再遍历一次,这效率就很低。select的思想是预先传递一个socket列表,若列表中的socket都没有数据就挂起进程,直到有一个socket收到数据,唤醒进程。原创 2023-03-01 23:30:43 · 138 阅读 · 0 评论 -
io_uring简单了解
当我们进行一个系统调用,用户层的应用程序调用内核,它在内核空间中复制数据。在内核完成执行之后,它将结果复制回用户空间缓冲区。然后它返回。在这段时间内,系统调用仍然被阻塞那么如何解决多次复制和同步问题呢由此便引出了io_uringio_uring是2019年Linux5.1内核首次引入的高性能异步IO框架,能显著带来加速IO密集型应用的性能但相比正确使用的AIO可能最多只有5%的提升io_uring来自于Jens Axboe的观察——随着设备越来越快,中断驱动效率已经低于轮训模式。............原创 2022-08-15 17:20:28 · 2953 阅读 · 0 评论