缓冲区的概念
在计算机运行过程中,CPU负责对数据的加工和处理,而硬件设备则负责对数据的传输、表示或存储,如打印、输入\输出等。在这一过程中,不同设备的处理速度有较大差别,从而造成一定程度的效率问题。如在打印机输出过程中,若CPU直接将计算结果交由打印机输出,由于打印输出速度较慢,CPU将需要等待上一个结果输出完成后才能继续输出下一个结果。同样,在输入过程中,CPU需要一直等待直到设备I\O将读取的数据交由其处理。在这个过程中,由于CPU速度较I\O设备快,CPU在大部分时间处于等待状态,从而使得CPU利用率很低,造成系统昂贵资源的浪费。
为了解决CPU与外围硬件设备速度不匹配的问题,提高CPU的利用率,提高系统的并行效率,在系统中引入了缓冲区(buffer)的概念。
缓冲区是在物理内存中独立分配的用于数据移动过程中临时存储数据的内存区域。(Wiki Data Buffer)
在使用Buffer之后,数据的传输过程中,可以将数据先放置在缓冲区中,再交由其他设备处理。以上面操作过程为例,CPU可以先将计算结果存放在缓冲区中,再由打印机从其中读取数据,在打印机输出的过程中,CPU可以处理其他数据而无需等待。在输入过程中,CPU不等待输入完成,I\O设备将用户输入存放在缓冲区中,再去请求CPU资源,CPU则可直接从缓冲区中读取数据进行处理,从而大大提高了CPU的利用率和运行效率。
标准I\O的缓冲
标准I\O根据不同的应用需求,提供了全缓冲、行缓冲、无缓冲三种缓冲方式。
全缓冲:只有当划定的缓冲区被填满或者数据读取至末尾时,才开始执行I\O