• 《缓冲区的理解》


    【一】缓冲区是什么?

    本质:缓冲区本质上就是一块内存空间

    既然是内存空间,那么就会有几个问题,谁申请的?属于谁的?为什么要有缓冲区这个概念?

            你想想,一份数据从cpu寄存器内计算出来,然后需要将这份数据输入到磁盘中,无非有两种方式,一种是直接从cpu内部向磁盘写入,一种是先写入到内存中,然后由内存向磁盘中写入。其实明眼人都能看出来,第一种方式的速度是十分缓慢的,因为相比于cpu的输出速度,磁盘的写入速度是非常慢的,这也就会导致电脑这个设备总体的运行速度变慢,这就是著名的木桶效应,所以由cpu向内存中写入,再由内存打包后同意写入到磁盘中,这种中间虽然多出了一个中间商,但是这种方式确实我们最快的选择了。

            题外话:其实fwrite函数与其理解成为一个写入到文件的函数,不如理解成fwrite是一个拷贝函数,从缓冲区内拷贝文件区外设中。

            这是我们无法证明的,但是我们却可以看到接口,但是如果OS宕机了呢?OS中的数据丢失了呢?比如说银行,这种对数据丢失0容忍的机构,所以他们采取的一般是无缓冲。

    【二】缓冲区刷新策略的问题

            从上文我们知道,一块数据从内存写入到外设中,是一次性一块写入效率高还是将一块数据拆分成多批次写入到外设的效率高呢?我们显而易见,肯定是一次性一块写入的效率最高,因为向外设中写入数据,耗时最长的并不是写入的过程,而是你打开外设的过程。

            缓冲区一定会结合自己的具体的设备,定制自己的刷新策略:

    a.立即刷新——无缓冲

    b.行刷新——行缓冲——显示器——给人看的

    c.缓冲区满——全缓冲——磁盘文件

    当然这是一般情况下的刷新策略,是一般情况就会有特殊情况:

    1.用户强制刷新

    2.进程退出刷新

    【三】缓冲区在哪里?

    缓冲区是被我们封装为struct FILE的一部分,后面会有一篇带小伙伴们专门实现的博客

    【四】文件管理系统

            如果一个文件没有被打开呢???该如何被OS管理,总不能把没有被打开的文件静静的放在磁盘上放着吧!

            其实磁盘上有大量的文件,也是必须要被静态管理的,方便我们随时打开,这就是文件系统。

    以上就是这期的全部内容了,如果觉得写的还行的话,还请动动小手一键三连,如果有啥问题的话还请位于评论区斧正,毕竟码字不易,球球了,兄弟们。

  • 相关阅读:
    蚁剑流量分析
    vue基础入门
    02 MIT线性代数-矩阵消元 Elimination with matrices
    MyBatis插件原理探究和自定义插件实现
    垂直分表、分布式Id详细介绍、模板引擎FreeMarker、对象存储服务MinIO(黑马头条Day02)
    Flink开发语言使用java还是Scala合适
    UML简介
    docker保存镜像出错
    基于PHP+MySQL共享自行车租赁管理系统的设计与实现
    JAVA生成安全认证证书
  • 原文地址:https://blog.csdn.net/wuqin668/article/details/128098268