A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张强1 中级黑马   /  2013-7-25 21:51  /  1156 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨兴庭 于 2013-7-28 22:55 编辑

我们知道,在向文件中写入数据时,使用缓冲区要比一个字节一个字节的写数据效率高很多。
但是,计算机在真正的向硬盘中写数据时,都是一个字节一个字节的写的。
那么问题就来了,都是一个字节一个字节的向文件中写数据,效率高在哪里?
毕老师讲视频时说减少了硬盘访问效率,那有减少啊?
不甚迷惑,还请高手详细讲解

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

3 个回复

倒序浏览
这个问题属于计算机组成原理的部分;
首先,向文件中写入数据是属于计算机系统中的I/O功能部分,然而在I/O设备与主机交换信息时,由于设备本身机电特性的影响,其工作速度远远低于CPU的运行速度,导致无法与CPU匹配;
因此,CPU启动设备后,往往需要等待一带时间才能实现主机与I/O设备之间的信息交换。如果在设备准备的同时,CPU做无谓的
等待,这样将会大大地降低CPU的执行效率。
再者,由于I/O设备向主存请求的级别高于CPU访存,这就出现了CPU等待I/O设备访存的现象,致使CPU空等一段时间,降低了CPU的工作效率

所以,为了解决这个为题,就出现了中断系统(解决I/O的外设速度匹配问题),其中中断系统又分为程序查询方式、程序中断方式和DMA方式(这里不做赘述)
在中断系统中,为了将数据事先准备好,等待中断响应的时候一起提交给CPU,于是在I/O接口中出现了数据缓寄存器DBR(DataBufferRegister)
这里就有了I/O系统中相应的I/O缓冲区的概念(这个概念不仅仅出现在I/O系统中,同样为了匹配CPU与主存的缓冲系统中--即Cache)。

下面是I/O接口的基本组成图:


这样的话,当中断响应以后,虽然CPU写入硬盘的方式是一个字节一个字节地写入(严格来说应该是按照地址线来一个地址一个地址地写入)
但I/O接口数据缓冲寄存器就能将缓冲起来的数据一次性地提交给CPU来处理,这样大大提高了CPU的工作效率。

评分

参与人数 1技术分 +2 收起 理由
杨兴庭 + 2 很给力!

查看全部评分

回复 使用道具 举报
道理很简单,假设你要读取一个文本文件输出到屏幕,一次读一个字节,然后赋值给声明的一个变量,那么需要读取很多次,如果用了BufferedReader,就可以一次把所有的字节都读取到缓冲区,然后再一次性赋值给变量,效率自然就提高了
回复 使用道具 举报
就像匹配速度,虽然就是一个一个的读,假如:你输入的速度慢,那么写到硬盘中慢,
要是用缓冲区的话,先放到缓冲中,等大了,就可以连续写入了,这样就节省了利用内存的时间,

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马