为什么会有缓存这玩意其实特简单,因为 cpu 的速度比内存的速度快的多,有同学说具体快多少,一百比一。 当然我们想起剖析这个概念, cpu 速度比内存速度快一百倍,什么意思呀?你 cpu 做计算的,我能理解, 你内存是做计算用的吗?你内存是做存储用的呀?大哥,你说你一做计算呢,跟人家做存储的比速度是怎么比呢? 听清楚这概念,所谓的计算,所谓的 cpu 速度比内存速度快,指的是这个意思, 通过我们的计算单元去访问我们内部计算器,如果这个速度是一纳秒,那么通过我们计算单元能够访问到我们内存的这个速度。一百纳秒 是这个意思,这是他的速度啊,速度比的一个概念,一百比一。好。当你理解了这件事之后,你就会发现啊,我们 cpu 速度比内存速度实在快太多了。假如我要从内存读个数据过来的话,我发出一条指令说你给我读过来, 然后我就等九十九那秒,等着他读过来,我才能继续能理解了吧。那我怎么充分利用这九十九那秒啊?大哥,你能不能别这么慢呀?啊?我读个数据你要浪费我九十九那秒,读个数据又浪费我九十九那秒,那我 cp 我简直实在是没有用武之地了。 所谓现在的高性能充分,就是充分把 cpu 的性能给他挖掘出来啊,给他燃烧出来,就干这件事,就让他充分利用起来。怎么才能利用利用呢? 最容易想到的就是中间加一层缓存,就这个缓存啊, cpu 返到这里的速度会比较快,这里速度比较快,比方说我要返回一个数据的时候, 我呢访问这个数据的时候,我会首先从最快的里面去找啊,如果没找到的话呢?我在内存里面再去找,找到了之后把这个数据读过来,表示数据是三放到这里,当我下次再访问这三的时候,我就不用内存找了,我内存是一百个纳秒,我这是五十个纳秒。 好,我去直接这个缓存里找就可以了。 ok, 这个是缓存的概念。好,当你理解了这件事之后, 如果说我,我就再问你,如果我觉着五十那秒我还不够爽,速度还不够快,来,你告诉我怎么办?怎么办?多急缓存。对,再来一个,对, 再加一层缓存。哎,瑞丽是个数据库的关系。说的很对,没错,再加一个缓存不就可以了吗? 那如果还不够呢?再加,那到底我加多少个缓存格式啊?如果说加的,呃,缓存的数量太多,你说 cpu 到内存之间,我加一百层换存太多了,然后呢?浪费也浪费硬件是吧?然后你每读一个数据都在中间存一百次 啊,这个也不太好,那如果太少了的话呢?如果命中率不够的话呢?他这个速度还提升不起来,所以他 同学们记住中间有多少多少层缓存。到目前为止,工业界是一个权衡利弊的结果,是一个妥协的结果,是一个成本和效率互相之间妥协的结果。到目前为止,一般来讲是三级缓存, 也不排除将来内存的速度会变来,变得越来越快,那么这个时候可能两级就够了,也不排除将来 cpu 速度越变越快, 这个时候三级不够会变成四级、五级,但是不管怎么样,在目前的工业界用的基本上是三级缓存。看这里,一般来讲呢,我们第一级缓存被称之为 l one, 第二级来个 two, 第三级来个 siri, 经过中间的三级缓存,我们才能达到我们的主内存 访问寄存器已纳秒小于已纳秒,访问直接内存八十纳秒 好了。讲清楚这件事之后,还有一个最基本的概念,就是我们这三阶段分为什么位置, 听我说,每一集缓存,第一集和第二集是和我们的合在一起的,第三集 是多和共享,因为我们的一颗 cpu 里面会有好几个核,也就说一颗 cpu 里面会有一个 l 三级缓存, 然后才是我的内存啊。红中说了个特别有有用的问题啊,我觉着得把红中这句话呢给大家交代一下,没有什么价格我是加一层解决不了的,如果有的话就再加一层。我告诉你,计算机到现在为止,软件到现在为止,这句话实际上是核心中的核心, 是金科玉律,这句话就是软件开发和硬件解决问题的易进京, 没有什么架构是夹一层解决不了的,实在不行就再夹一层,你记着这个就行啊,你不信你去找去 说。我这 vm 好多操作系统,我屏蔽不了,没关系,我加一层,这 vm 我是不是搞定了?所以呢,在我们真正的多和 ppu 里面,他是这么一个物理结构,这个结构是什么样的呢?我们有一个 i u, 他访问计算器的速度是最快的,当然计算器也是最贵的。然后呢,中间权衡的结果,我在中间加了一层缓存, 又在中间又加一层缓存,我两个和 cpu 共享同一个 l 三,我两颗 cpu 呢,共享整个的内存,有同学说中间还有没有可能会加呀?你要愿意的话呢?也可以啊,也是没问题的,随你。 下面我们来琢磨。如果在多级缓存的架构里头,我们开始读一个数据过来,从内存里面读一个数据过来,比如说这个数据就放在这三, 我们现在 ar u 呢?要用到这个三,我们怎么做?我们当然首先是去哪找啊?是去一层一级缓存里找,有没有啊?没有 没有呢?找二级缓存还没有找,三级缓存还没有。好了,这个时候我们从内存里找好,我们往回读的过程什么样呢?他会首先往 这放一个,往这又放一个,往这又放一个。 ok, 这是我们就读到这个三了,然后把它读到计算器开始做计算。当如果我们下次又用到这个三的时候,我怎么办? 我突然间发现二万已经有了,我还有没有必要走剩下的步骤呢?没必要,这样的话呢,我们的效率就提升了, 一盒 cpu 对应一个 luok, 当你理解了这个概念之后,我们好好琢磨一件事。 呃,我每次读这个数据的时候,比方说我用到了数组里面的第零个位置上的数据, 我对这个数组做一个循环访问,当我读他第零个位置,我发现没有,然后呢,我把这第零个的位置的时候呢,在每一个缓存里面放一遍,然后我马上要用第一个数据,我发现还没有。怎么办?我又把这第一个数据往这放一遍, 你发现没有,这个效率反而变低了。原来我只要直接直接读内存,现在呢,我美读的一个都得往中间缓存放,一个反而变低了。 那我有没有什么提高效率的办法呢?你,你好好给我琢磨琢磨,有没有有提高效率的办法吗?提高效率办法很难想到吗? 听我说很简单吗?就是当我要读取这个数据的时候呢,我不是只读那个,我用到的,我会把这个数据周边的一些数据一块读进来。比如说我读这 输组的时候,我用到第两个位置,我顺带着把后面七个位置一块堵过来,不是零一二三组,六七八,我全堵过来。 那大家理想一下,当我下面在访问第一个位置,我还用剩下的步骤吗?没有了。所以呢,哎,进行一个阅读曲,就是我读数据的时候,并不是一个一个读,并不是一位一位读。哎,我是 好,这里有个专业的名词,叫做一行一行读,一行一行, ok, 这个呢,称之为缓存行,他是一行一行读好了,下面马上面临的问题就是,这一行到底应该设多大? 走不走吗?是越大越好,还是越小越好?这里面也是工业界的一个妥协, 别的结果,是一个权衡的结果,是一个统计出来的结果。听我说,当然你可以把它做的很大,你这一下读进去,恨不得把半块内存全读进去,都放二万里面,哇,这个太爽了,每次都去二万里放对不对?速度太快了,很爽。 但是很不幸的是呢,你如果每每读这么一大块的话,读这一层效率就比较低。假如我其中就用到了一个,这块不用了,你又把它给拿走,然后读另外一块, 如果你说的比较小呢?你就有好多种不可能在最近的缓存里命中的机会,说找第二个没有,没读进来,找第三个没读进来,你又得重新读, 所以叫做大有大的好处和坏处,小有小的好处和坏处,那,那这事怎么办呢?中间做一个统计,目前为止,在三级缓存的情况下, 在目前 cpu 的这样的计算力的情况下,这个数字是最合理的。好,这个数字,请大家记住, 这个数字被我们称之为六十四个字结, 不是六十四位啊,是六十四个字结,所以到现在为止,我们任何一行数据,一行数据就是六十四个字结。这么大个。好,当你理解了一个缓存行的概念之后,马上就会你就会面临的问题就来了, 你比如说大家听我说,我再说一遍。记住,作为我们 cpu 来讲,我们访问数据的时候是按照十以什么为单元来进行访问的呀?换存行一行是多大?六十四个字典, 那现在问题就来了,在哪呢?比如说我们这一行数据里面有一个 x, 有一个 y 这两个数据, 然后呢,我们左边这一盒这个 cpu 盒,他只会访问 x 啊,他,但是呢,他读的时候会把这一行数据 是不是躲到这里面自己的里面来,虽然我只访问 x 对不对?那右边这颗 cpu 呢?他只访问外,但是呢,他也会把这一行的数据放在这里来,同学们,你们看看, 虽然说这行数据在内存里头只有这么一行,但是真正让我们两颗 cb 同时访问的时候,你会发现他在中间多了好多个拷贝,多了好多个拷贝, 你竟然多了好多口碑。而且我们访问数据的时候是按照最基本的访问单元,是按照一行来的,如果说 我这个 x 发生了变化,就意味着我这行发生了变化,我这行发生了变化。由于我这一行在另外一个 cpu 里也有我,是不是或者说我要不要通知另外一颗 cpu 呢? 要呢还是不要呢?我是不是得保持这两个缓存行数据要一致呀?好,这个呢就叫做缓存一致性。 首先第一点,这个要不要一致是某些指令来决定的,有的指令我就是个毒,我一致他干嘛?不,不以不用一致, 有的指令呢?我需要做一致,那么我必须得有某一种协议来保证这个行和这个行数据是一毛一样的,比如说缓存锁,什么叫缓存锁呀?锁定某, 我在改的时候我锁定这行,其他 cpu 不去改,只能读,这个就叫做缓存一致性协议。大家听我说,缓存一致性协议这件事跟语言没有半毛钱关系, 不管你是 c 语言,你是 c 加加语言,你是加外语言,你是拍森语言,你是勾语言,随你在底层这件事情是永远存在的。 ok, 还有同学会说,老师,缓存行这件事真的会存在吗? 看个程序,我们讲这么多理论讲了快俩小时理论了,这没招啊,我必须先给你打理论基础,看程序你才能看得懂,不然你真的看不懂。好,我们来看一个小程序。
粉丝1.2万获赞4.0万


固态硬盘有缓存和没有缓存有什么区别?由于固态硬盘速度快,现在组装电脑基本都会配备固态硬盘,有的固态硬盘有缓存,有的固态硬盘没有缓存,两者到底有哪些区别呢?第一点, 运行速度不同,性能好。带缓存的比不带缓存的过天板快很多,缓存越大,对速度的改善越快。缓存的意思就是 刚用过的数据马上再用,或者短时间内再用会非常快,基本上就是瞬间读取数据。 第二点,价格不同。一般情况下带缓存的固态硬盘更快一些,带缓存的同容量固态硬盘价格也不同,一般比不带缓存的会更贵一些。第三点,性能不同,有缓存的优势,可以使固态硬盘性能更一致,也就是说空盘和满盘性能差距,不 但是掉电容易丢数据,需要额外的掉电保护。无缓存的优势,也就是掉电不容易丢数据,可以更好的控制固态硬盘的成本就是四 k, 性能会比较难看,性能一致性不够好,不适合高负载的场合。

固态硬盘为什么一定要买带缓存的呢?大家好,我是黑冰。大家好,我是夏娜。最近啊有个奇葩的事,听过我的硬剑客视频的朋友都知道,我一直推荐的啊,都是带缓存的固态比较好,而我从来不推荐的固态就是例如三星九八零不带 pro 的这个版本啊,那就是无缓存的 结果啊,最近我群里有个小伙伴啊,非在群里啊,以一己之力硬杠全群玩家啊,他的说法是什么?他说三星作为世界的大厂啊,即使这款三星九八零没缓存,也是非常不错的。好吧好吧,那我们今天啊就来给大家讲一讲固态的缓存主要是干什么用的。 这里啊,我们先了解一下固态硬盘,来看一下这张图。这个呀,是我在网上找的一个三星固态的宣传图,我们可以看到啊,固态硬盘主要的芯片有三 三个部分,一个是这里啊,是主控芯片,而另一个呢就是在这里啊,这个是那的散存芯片啊,非常重要存储数据的部分,当然在中间这个部分,这个就是缓存芯片。那么我们挨一个来介绍一下 主控芯片干什么用啊?主控芯片那是负责指挥的你的电脑啊,对固态硬盘所有的要求啊,包括什么读取什么的,都是要发给主控的,然后主控再来分析你的电脑的要求,再对整个固态硬盘进行操作。 而这个纳特散存芯片啊,是干什么用的呢?他啊,就是文件存取的地方,我们可以理解为啊,这纳特散存芯片啊,就是一个非常大的图书馆,而在这个芯片里面啊,有一个一个啊,成千上万的书架,这些书架上放的书就可以理解为你电脑里面的数据,当然我们的电脑固态硬盘中啊, 可能这个数据非常多,而主控呢,每次啊都在其中寻找数据的时候啊,就是非常难,非常的慢,而这个缓存芯片啊,就很好的解决了这个问题,缓存中一般会记录很多你之前读取过的数据的路径,当你再次需要读取这个数据的时候,哎, 主控啊,不用再这样啊,从整个这个那的散存芯片中一个一个扒拉他需要的数据了,而是直接读取缓存中上次用过的路径啊,就直接找到这个数据了,那么这些数据啊,分裂整理之后啊,在规整的写入到这个那的散存芯片中, 这样可以节省那段产生芯片的使用,大幅的提升固态硬盘的使用寿命。那么如果固态硬盘没有缓存怎么办呢?这些固态硬盘厂家啊,就会把这些功能一部分放到主库 控力,另一部分啊放到那个闪存里,等于啊就是把缓存的功能分割了,当然如果这样的话,那肯定速度啊是要比有缓存芯片的要慢啊, 而且这样还加剧了主控的发热和那的闪存的发热,所以固态硬盘的寿命可以说急剧的减少了。例如啊,当年某品牌的固态出现了 一发热就吊盘的情况,其实啊,就和这个有关。最后啊,我们也顺便说一下,一般呢缓存芯片的容量要求啊,是那的闪存的千分之一, 例如啊,这个固态硬盘如果是一 t b 容量,那么他的缓存呢,应该就是一计币的容量,但是啊,现在有的厂家呢,想去蹭啊这个带缓存固态硬盘的热度,又想把这个固态硬盘的价格往下压,怎么办呢?哎,很简单,把这个 缓存芯片的容量往下下降,例如啊,一 t b 的固态硬盘装个五百一十二 m 的缓存,甚至啊,装个更小的二百五十六 m 的缓存,当然这样啊,也不能说一点用都没有啊, 但是这个缓存芯片的效果那肯定是大打折扣了。好的,那么大家有没有发现身边哪个品牌的固态就这样做了呢?