-
2018-12-08 21:20:54
缓冲(buffer)和缓存(cache)的区别:
缓存(cache)是在读取硬盘中的数据时,把最常用的数据保存在内存的缓存区中,再次读取该数据时,就不去硬盘中读取了,而在缓存中读取。
缓冲(buffer)是在向硬盘写入数据时,先把数据放入缓冲区,然后再一起向硬盘写入,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。
简单来说,缓存(cache)是用来加速数据从硬盘中"读取"的,而缓冲(buffer)是用来加速数据"写入"硬盘的。更多相关内容 -
缓冲和缓存的区别
2021-01-27 14:05:42缓冲 Buffer 缓冲的作用是协调上下层应用之间的性能差异。 在上层应用中流量可能比较大,速度比较快,下层应用流量小,处理速度慢,这样很难去协调好处理的问题,下层应用很难去接收那么多数据,所以中间加了一个...缓冲 Buffer
缓冲的作用是协调上下层应用之间的性能差异。
在上层应用中流量可能比较大,速度比较快,下层应用流量小,处理速度慢,这样很难去协调好处理的问题,下层应用很难去接收那么多数据,所以中间加了一个缓冲区去协调好上层应用与下层应用之间的协调问题。
通过缓冲区的缓冲,当上层组件性能优于下层组件的时候,缓冲可以有效减少上层组件对下层组件等待的时间。有这样的缓冲区的存在,上层组件就不需要等待下层组件完全接收全部数据,就可以返回进行其他操作,加快了上层组件的处理速度,从而提升整个系统的性能。
在消息队列中体现。我们可以使用缓冲流来做代码测试
不使用缓冲流
package com.yy; import java.io.FileWriter; import java.io.IOException; import java.io.Writer; public class WriteDemo { public static void main(String[] args) { Writer writer = null; try { writer = new FileWriter("E:\\file.txt"); int num = 10_0000; long startTime = System.currentTimeMillis(); for (int i = 0; i < num; i++) { writer.write(i); } long endTime = System.currentTimeMillis(); System.out.println(endTime - startTime); } catch (IOException e) { e.printStackTrace(); }finally { try { writer.close(); } catch (IOException e) { e.printStackTrace(); } } } }
用时:
使用缓冲流
package com.yy; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.io.Writer; public class Buffered { public static void main(String[] args) { Writer writer = null; BufferedWriter bufferedWriter = null; try { writer = new FileWriter("E:\\file.txt"); bufferedWriter= new BufferedWriter(writer); int num = 10_0000; long start = System.currentTimeMillis(); for (int i = 0; i < num; i++) { bufferedWriter.write(i); } long end = System.currentTimeMillis(); System.out.println(end - start); } catch (IOException e) { e.printStackTrace(); }finally { try { bufferedWriter.close(); writer.close(); } catch (IOException e) { e.printStackTrace(); } } } }
运行时间:
可以看出使用了缓冲流,处理的效率会比较快。既然提到了BufferedWriter,那么BufferedWriter有两个构造器,分别为:
public BufferedWriter(Writer out) { this(out, defaultCharBufferSize); } public BufferedWriter(Writer out, int sz) { super(out); if (sz <= 0) throw new IllegalArgumentException("Buffer size <= 0"); this.out = out; cb = new char[sz]; nChars = sz; nextChar = 0; lineSeparator = java.security.AccessController.doPrivileged( new sun.security.action.GetPropertyAction("line.separator")); }
public BufferedWriter(Writer out)默认创建了一个8KB的缓冲区
public BufferedWriter(Writer out, int sz) 可以自己去指定缓冲区的大小。但是要记住缓冲区的大小要适中,太大了会浪费系统资源增加GC的负担,太小了就会达不到缓冲的效果。缓存 Cache
为了提升系统性能开辟一块空间,缓存是将反复使用的数据存储起来,供系统去调用,避免程序反复从数据库中读取相同的数据。
-
缓冲和缓存
2020-07-06 16:14:281 缓冲(Buffer) 和缓存(Cache)区别和联系. 2 区别: buffer与cache操作的对象就不一样. (1) buffer(缓冲)是为了提高内存和硬盘或其他I/0设备之间的数据交换的速度而设计的. 当创建buffer对象时. 会创建一个缓冲区数组...1 缓冲(Buffer) 和缓存(Cache)区别和联系.
2 区别: 两者操作的对象不一样.
(1) buffer(缓冲): 是为了提高 内存和硬盘或其他I/0设备 之间的数据交换的速度而设计的.
当创建buffer对象时, 会先创建一个缓冲区数组. 然后当我们读一个文件时, 先从硬盘中读到缓冲区, 待缓冲区 满后 再进行传送. 这样会大大减少读写次数,这样就可以节省很多时间, 效率会更高.(2) cache(缓存) 是为了提高 cpu和内存 之间的数据交换速度而设计.
高速缓冲存储器, 读写速度很快,几乎与CPU一样。由于CPU的运算速度太快,内存的数据存取速度无法跟上CPU的速度,所以在cpu与内存间设置了cache为cpu的数据快取区。当计算机执行程序时,数据与地址管理部件会 预测 可能要用到的数据和指令, 并将这些数据和指令预先从内存中读出送到Cache. 一旦需要时,先检查Cache,若有就从Cache中读取,若无再访问内存,现在的CPU还有一级cache,二级cache。简单来说,Cache就是用来解决CPU与内存之间速度不匹配的问题,避免内存与辅助内存频繁存取数据,这样就提高了系统的执行效率. 设置缓存的理论基础, 是程序访问的局部性原理. 缓存的功能均由硬件实现,对程序员是透明的.
(3) buffer偏重于写, 而cache偏重于读.3 相同点: 两者都加快了系统的反应速度.
4 举例:
缓冲:我们倒垃圾的时候,不可能一有垃圾就直接跑去垃圾站倒垃圾吧。而是先把垃圾倒到垃圾桶,垃圾桶满了再一起倒到垃圾站。其中垃圾桶就是这个缓冲容器。得到缓冲池满了,再一起处理。其实这和我们的缓冲流一样,都有一个buffer。很多中间件都有这个有。其实就是为了减少io操作次数,提高效率。
缓存: 我们生活中看视频就是个最好的例子, 比如我要看《神雕侠侣》,如果我没有下载。则需要我先从远程服务器下载好到本地。那么我以后需要看《神雕侠侣》的时候,之间本地看就行了。本地的《神雕侠侣》就相当于一个缓存容器. -
磁盘缓存专题之一 缓存命中和缓存未命中缓存与缓冲间的差异
2020-12-15 19:22:07不论什么时候,只要系统带有多个设备,而这些设备的性能又各不相同,就存在从慢速设备到快速设备不断更换工作地点以改善系统性能的可能性,这就是缓存的基本思想。即数据从一个地点拷贝到另一个地点,使之检索起来更... -
缓存与缓冲的区别
2021-04-05 10:49:30缓存与缓存的区别 1.1、缓冲 Buffer 很多时候上层应用的数据传输效率远远大于下次应用,所以要传输数据就要需要上层应用等待下层应用接收数据,会浪费很多时间 缓冲的作用就是协调上下层应用之间的性能差异,...缓存与缓存的区别
1.1、缓冲 Buffer
-
很多时候上层应用的数据传输效率远远大于下次应用,所以要传输数据就要需要上层应用等待下层应用接收数据,会浪费很多时间
-
缓冲的作用就是协调上下层应用之间的性能差异,可以有效减少上层组件对下层组件的等待时间,可提升整个系统的性能
-
当需要把一盆水倒入一个细口瓶时,缓冲区就像中间的一个漏斗,可以将水(数据)完完整整且以较高效率的倒入瓶中
1.2、测试
//使用缓冲区BufferedWriter 将0-1000000的数字输出到指定文件 private static void testBuffer() { try { BufferedWriter bw=new BufferedWriter(new FileWriter("textBuffer.txt")); int num = 1000000; long beginTime=System.currentTimeMillis(); for(int i=0;i<num;i++){ bw.write(i); } long endTime=System.currentTimeMillis(); System.out.println(endTime-beginTime); } catch (IOException e) { e.printStackTrace(); } }
平均用时60ms
//不用缓冲区 使用普通Writer public static void test() { Writer writer = null; try { writer = new FileWriter("textBuffer.txt"); int num = 10000; long beginTime=System.currentTimeMillis(); for(int i=0;i<num;i++){ writer.write(i); } long endTime=System.currentTimeMillis(); System.out.println(endTime-beginTime); } catch (IOException e) { e.printStackTrace(); }finally { try { writer.close(); } catch (IOException e) { e.printStackTrace(); } } }
用时138ms左右
1.3、BufferWriter 的两个构造函数
BufferedWriter(Writer writer); BufferedWriter(Writer writer,int size);
- BufferedWriter 默认创建8KB的缓冲区
- BufferedWriter 中的size参数即可以自己指定缓冲大小
2.1、缓存 Cache
缓存是为了提升系统性能而开辟的一块空间,与缓冲不同的是,缓存是将被反复使用的数据存储起来,供程序直接调用,避免程序反复的从数据库中读取相同的数据。
存 Cache
缓存是为了提升系统性能而开辟的一块空间,与缓冲不同的是,缓存是将被反复使用的数据存储起来,供程序直接调用,避免程序反复的从数据库中读取相同的数据。
-
-
MySQL查询缓存和缓冲池的区别
2019-11-03 10:44:32InnoDB存储引擎基于磁盘文件存储,访问物理硬盘和在内存中进行访问,速度相差很大,为了尽可能弥补这两者之间的I/O效率的差值,就需要把经常使用的数据加载到缓冲池中,避免每次访问都进行磁盘I/O.... -
浅谈带缓冲I/O 和不带缓冲I/O的区别与联系
2020-12-31 05:47:19系统内核对磁盘的读写都会提供一个块缓冲(在有些地方也被称为内核高速缓存),当用write函数对其写数据时,直接调用系统调用,将数据写入到块缓冲进行排队,当块缓冲达到一定的量时,才会把数据写入磁盘。... -
对缓冲区和缓存的认识
2022-04-14 22:57:41缓存区是内存和cpu之间的存储区,用来存储cpu多次从内存读取到的数据,多次读取同一变量,就会将该变量放到缓存区中,当再次调用时直接从缓存区取,不从内存中取,当内存中该变量改变时,这种情况会导致内存不可见... -
Buffer缓冲和Cache缓存的区别
2017-09-25 17:03:09缓冲和缓存的区别 -
缓存和缓冲的区别
2015-06-12 20:34:59今天在看nginx的Proxy Cache指令时讲到了和Proxy Buffer的区别,觉得挺有意思的。 对于计算机发展来说,缓冲(buffer)技术和缓存(cache)技术都是十分重要的,它们对于提高IO吞吐效率是非常关键的。但是缓冲和缓存... -
ioblockreader:块缓冲和缓存的IO对象作为字符串读取-开源
2021-04-25 11:58:29Ruby库通过类似String的接口提供对IO对象的块缓冲和缓存读取。 将大文件解析为字符串的理想选择,从而限制了内存消耗。 -
白话讲解缓存和缓冲区别
2019-06-28 22:14:19缓存和缓冲,两者都是将数据暂存在一个容器中。那两者怎么区分呢?下面我已生活例子打一个举例。 缓冲:我们倒垃圾的时候,不可能一有垃圾就直接跑去垃圾站倒垃圾吧。而是先把垃圾倒到垃圾桶,垃圾桶满了再一起倒到... -
缓存与缓冲的理解
2021-01-21 16:15:01要理解缓冲区,必须明确另外两个概念:“扇区” 和 “块”。扇区是设备的最小寻址单元,也叫 “硬扇区” 或 “设备块”。块是操作系统中文件系统的最小寻址单元,也叫 “文件块” 或 “I/O 块”。每个块包含 -
缓冲与缓存
2021-12-09 15:22:54缓存与缓冲一字之差,到底有何区别,我们来探讨下! 缓冲(buffer) 定义及作用 缓冲技术是为了协调吞吐速度相差很大的设备之间数据传输而采用的技术。 为了缓和CPU和I/O设备速度不匹配的矛盾,提高CPU和I/O设备的... -
缓冲区与缓存(buffer与cache)
2019-05-30 11:33:35缓冲区buffer缓存区的作用Python中的缓冲缓存区的类型2.缓存cache缓存的适用场景缓存的三种模式Python中的缓存 缓冲区与缓存(buffer与cache) 1.缓冲区buffer 缓冲区(buffer),它是内存空间的一部分。也就是说,在... -
磁盘缓存专题之一 缓存命中和缓存未命中&缓存与缓冲间的差异
2020-09-11 01:12:09在大多数计算机中,缓存是一个很重要的技术。事实上,计算机中的所有数据访问都可以看成是基本缓存概念的某种变体 -
linux – 如何查看缓冲和缓存的数据
2021-05-11 13:06:50免费中由“buffers / cache”表示的内存分别是您的磁盘和文件系统缓存,Linux缓存以加速从磁盘读取数据,因为访问磁盘通常是一种反复访问数据的相当慢的方式.因此,它们被缓存在内存中,如果可用的话,从那里透明地提供... -
双缓冲和单缓存的区别
2016-08-29 09:59:52双缓冲和单缓存的区别编码时遇到glutInitDisplayMode(unsigned int mode) ;函数,主要作用是设置初始显示模式,其中有两个可用形参不甚理解。分别为GLUT_SINGLE,GLUT_DOUBLE。其中GLUT_SINGLE指定单缓存窗口,GLUT... -
用户和内核存(cache)区 缓冲(cache)和缓存(buffer)的区别
2020-08-20 20:51:40用户进程缓存区 用户进程通过系统调用访问系统资源的时候,需要切换到内核态,而这对应一些特殊的堆栈和内存环境,必须在系统调用前建立好。而在系统调用结束后,cpu会从核心模式切回到用户模式,而堆栈又必须恢复... -
缓存和缓冲区别
2020-01-16 16:48:56缓存(cached)是把读取过的数据保存起来,重新读取时若命中(找到需要的数据)就不要去读...缓冲(buffers)是根据磁盘的读写设计的,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。 ... -
缓冲区和高速缓存
2015-05-13 15:17:37例如,正在运行的进程的指令既存储在磁盘上,也存储在物理内存上,也被复制到CPU的二级和一级高速缓存中。 不过,磁盘高速缓存技术不同于通常意义下的介于CPU与内存之间的小容量高速存储器,而是指利用内存中的存储... -
Go面试题:channel的无缓存和有缓存区别
2022-02-24 18:50:071.channel的无缓存: 无缓存channel的创建 //括号中要定义channel中数据的类型 ch := make(chan string) 无缓存表示发送者必须等待数据被接收者接收才会继续发送到channel中。 func main() { var channel = make... -
用户缓冲区、内核缓冲区、缓冲区、缓存
2020-06-28 20:42:29但实际上有一部分人把用户进程缓冲区和系统空间的缓冲区的概念混淆了,包括这两种缓冲区的用法和所要解决的问题,还有其它类似的概念。本文就来区分一下不同的缓冲区概念(主要针对类unix平台)。 用户进程和操作... -
MySQL查询缓存与缓冲区的区别
2020-02-23 16:05:43最近在研究mysql时,发现查询缓存和缓冲池是两个比较容易混淆的点,在这里简单提一下二者的联系与区别。 正文 查询缓存 首先看下mysql的结构图,如下所示: 可以看到,查询缓存作用于第二层,即核心服务层。 其主要... -
缓冲区(Buffer)与缓存(Cache)异同
2020-02-18 16:42:59缓冲区(Buffer)定义 缓冲区(Buffer),它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区,显然缓冲区是具有一定大小的。 有... -
计算机里面的缓冲和缓存是什么意思?
2021-06-27 09:41:32匿名用户1级2015-02-11 回答缓冲器相当于一个寄存器,暂时保存数据。缓冲区是内存中存放数据的地方。在程序试图将数据放到机器内存中的某一个位 置的时候,因为没有足够的空间就会发生缓冲区溢出。而人为的溢出则是... -
【操作系统】高速缓存和缓冲区
2021-02-03 19:15:50比较高速缓存Cache和缓冲区Buffer