操作系统中的缓冲(buffer)
来源:互联网 发布:各国语言翻译软件 编辑:程序博客网 时间:2024/06/06 00:29
缓冲最常见于IO系统,例如:当希望向屏幕输出数据的时候,由于程序逻辑的关系,可能要多次调用printf函数,每次写入的数据只有几个字符,如果每次写数据都要
进行一次系统调用,让内核向屏幕写数据,这样效率很低下。因为系统调用的开销很大,它要进行上下文切换、内核参数检查、复制等,如果频繁进行系统调用,会严重影响程序和系统性能。
一种可行的方案是:对控制台连续的多次写入放在一个数组里,等到数组被填满之后再一次性完成系统调用的写入,实际上这就是缓冲最基本的想法。
读文件的时候,缓冲一样存在,可以在CRT中为文件建立一个缓冲,当要读取数据的时候,首先看看这个文件的缓冲里有没有数据,如果有数据就直接从缓冲中取。如果缓冲为空
,CRT就通过操作系统一次性读取文件一块较大的内容填充缓冲,这样,如果每次读取都是一些尺寸较小的数据,那么这些读取操作大多都直接从缓冲中获得,可以避免大量的实际文件访问。
写文件同样存在这样的问题,因为当我们通过fwrite向文件写入一段数据时,此时这些数据不一定被真正地写入到文件中,而是有可能还存在于文件的写缓冲中,那么如果此时系统崩溃或进程意外退出,有可能导致数据丢失,于是CRT还提供了一系列与缓冲相关的操作用于弥补缓冲所带来的问题。
所谓flush一个缓冲,是指对写缓冲而言,将缓冲内的数据全部写入实际的文件,并将缓冲清空,这样可以保证文件处于最新的状态。之所以需要flush,是因为写缓冲使得文件处于一种不同步的状态,逻辑上一些数据已经写入文件,实际上这些数据仍然在缓冲中,如果此时程序意外退出(异常或断电),那么缓冲里的数据将没有就会写入到文件。
flush可以在一定程度上避免这样的情况发生。
- 操作系统中的缓冲(buffer)
- 缓冲(Buffer)解释
- Netty Buffer(缓冲)
- 什么是模板缓冲(Stencil Buffer)
- WTL-双缓冲(double buffer)绘图
- 什么是模板缓冲(Stencil Buffer)
- Java优化组件缓冲(Buffer)
- InnoDB Insert Buffer(插入缓冲)
- 缓冲设计-buffer
- 帧缓冲 Frame Buffer
- 【设计优化】-使用缓冲(Buffer)提高程序性能
- 双缓冲(Double Buffer)原理和使用
- Cache(缓存)和 Buffer(缓冲),主要区别是什么?
- 操作系统缓冲技术
- 【操作系统】IO 缓冲技术
- 我对 缓冲(buffer)和 缓存(cache)的理解
- openssl之BIO系列之20---缓冲(buffer)类型BIO
- Linux的帧缓冲(Frame Buffer)之一:原理及控制参数
- 移动web开发,12个触摸及多点触摸事件常用Js插件
- Samsung LCD接口篇
- UDP套接字
- Java语言实现简易计算器(1)界面
- python multiprocessing logging
- 操作系统中的缓冲(buffer)
- Activity间传递数据
- jsp操作数据库,并将结果分页显示
- 系统架构领域的一些学习材料
- Windows下查看进程与线程的相关工具
- PHP Cookie管理
- WSDL手动生成WebService代理类的方法
- POJ 2887 Big String
- Nexys3学习手记1:写在前面的话