系统设计-缓存之一

       缓存,又称 memory cache,是一个高速内存存储器,从计算机硬件、操作系统到软件设计,缓存都是一个基础且核心的组件,在计算机的世界里无处不见。

       先从我们熟悉的CPU说起,CPU的高速缓存是CPU结构中的一个部件,intel i7-10代有高达16M的高速缓存,高速缓存的随机存取比内存高效很多,CPU指令执行时数据访问首先访问高速缓存,缓存没有去读计算机内存,通过数据总线传输给CPU缓存返回给处理器。仅次于CPU高速缓存的存储部件就是内存,其次是低速存储设备磁盘,我们软件设计概念的缓存是指在内存上的数据存储区域。

      程序运行环境所需数据都是存储在内存,高级语言提供的关键字new,new一个新的对象就是申请一块内存区域来存储,内存空间相比磁盘是昂贵的,区域是有限的,需要存储的数据超出的内存大小,就需要把数据存储到磁盘里,需要的时候读取到内存中,在计算操作系统设计上,为了程序执行的高效,使用了很多缓存设计。

      当你在一台内存是4G的计算机上运行一个32位的可执行程序,程序文件首先被加载到内存,如linux上的使用的是mmap磁盘文件映射到内存空间,计算机操作系统上可以启动N个程序,32位程序的内存地址空间都是4G,计算机内存只有4G,内存不够了就要用到磁盘来存储也就是虚拟内存,当内存不够时,操作系统会把程序的暂未使用的数据页面换出到磁盘,如从地址0x70000000-0x70001000 当此程序运行需要这些数据时,操作系统会产生缺页中断信号,然后调度程序将存储到磁盘的数据换入到内存首地址为0x70000000的的内存中。

      当你的程序调用fwrite将数据写入磁盘文件,为了提高程序执行效率,fwrite只是将数据存入到了IO缓冲区,操作系统在缓冲区满的时候将磁盘缓冲区中的数据写入磁盘,也可以调用fflush将数据写入系统缓冲区,fsync将系统缓冲区数据立即写入磁盘,一般磁盘也可以设置内存缓存区,用于提高磁盘性能。

      数据库,消息队列都提供将数据缓冲区同步写入磁盘,异步写入磁盘的方式,MySql默认是事务提交时将io缓冲区中的redolog调用fflush写回磁盘,保证数据的不丢失。

       我们在软件设计时,缓存写回磁盘可以使用同步写入,异步写入,异步写入磁盘一般从时间、缓冲区容量,特殊事件发生这几个维度来定义策略。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容