小议Buffer及cache的区别

原创文章,转载请指明出处并保留原文url地址

开发中经常用到buffercache两类对象,在写文档时经常将缓冲及缓存用混。今天特意查找文档及词典后来给自己纠正这个顽疾。

一.Buffer含义

下图是对buffer的一个理解。

wps_clip_image-27957[2][1]

其中模块A代表一定代码行的逻辑模块, 模块B代表另外一段代码行的逻辑模块。

模块A通过buffer同模块B进行了间接连接。间接链接好处是两个模块的耦合关系降低了。

图中,Buffer的作用就是 将输入前 杂乱无规则的数据,经过整理后 变成规则有序的数据。真实的buffer的作用其实就是数据的加工与处理,这样便于后一个环节进行处理利用等。具体情况视不同的buffer而不同。

以上仅仅是我个人的理解,那么是否正确?

二.Buffer的英文原义

下面是Buffer的专业的定义,如下:

wps_clip_image-5536[3][1]

网络定义如下:

wps_clip_image-22602[2][1]

三.Buffer小结

从上面两个定义可以知道buffer含义是缓冲的意思,在机械学上通过缓冲垫把两个系统链接到一起。其他定义都是有缓冲相关的意思。

因此我们可以这么理解

1. Buffer中一定至少存在两个物体或者事务。

2. 这个两个事务通过buffer进行连接

3. Buffer起到一定减缓或者协调的作用。

4. 两个物体或者事务一定是相互知道或者了解,只是进行了间接的连接。

四.Cache的理解

下图是cache的一种处理情况

wps_clip_image-32576[2][1]

如图,cache系统中存在模块A, 模块B,模块B包括若干实例, 模块A也可以包括若干实例。 模块A存数据到cache中。 模块B获取数据从cache中。

因此cache是个数据的临时存储场所,有的模块写入,有的模块获取。 写入模块未必了解读取模块的存在,更准确的是读取模块实例的存在,同时写入模块也不关心这些事情,他只管写入。读取模块同样只关心数据的读取,没必要了解到写入的存在。

五.Cache的英文含义

下面是cache的英文原义

wps_clip_image-5486[2][1]

wps_clip_image-27107[2][1]

从英文含义中我们可以获取到cache应该个存储东西的场所,他的核心功能是存储。

六.Cache小结

从上面两个定义可以知道cache含义是临时储存的一个场所。因此我们可以这么理解

1. Cache是存储场所,一个临时的储存场所

2. Cache系统中存在写入模块A,可以包括多个实例,读取模块B可以包括多个实例。

3. Cache是两类模块的数据中转的地方

4. 模块A仅仅需要知道cache, 模块B也仅仅需要知道cache的存在,他们相互间不需要相互了解。

七. Cachebuffer相同点

1. Cachebuffer都可以存储一定的数据

2. Cachebuffer存储的数据一般都是临时性的,不是永久性的

3. Cachebuffer系统中都存在若干模块的实例,一般至少需要两类模块的存在,模块A写入数据(生产数据),模块B读取数据(消费数据)

八.Cachebuffer的区别

1. Buffer中,写入模块及读取模块之间是通过buffer做的间接连接,两个模块的特定实例之间是存在耦合关系的。

2. Buffer一般是特定实例之间专有的,其他实例不应该访问否则有可能造成问题,除非逻辑上做了处理。

3. Buffer中数据一般是有顺序的,写入顺序及读取顺序之间需要一定的对应关系。双方必须按照约定进行相应的读取操作。

4. Cache是个共享的方式, 写入模块实例不需要了解读取模块的任何实例

5. Cache系统中各个实例之间只有同cache本身的耦合关系

6. Cache数据的写入及读取都是没有顺序的

7. Cache一般存在有效期,buffer没有,一般buffer都是专用的,buffer中数据有效期由专有实例管理就好了。Cache中数据过期后将由cache进行淘汰出去。

发表评论