
文章图片

简单易懂计算机内存模型之什么是高速缓存?
计算机内存模型1.高速缓存的诞生【Air Tag|简单易懂计算机内存模型之什么是高速缓存?】大家都知道计算机在执行程序时 , 是处理器CPU在执行 , 具体到每条指令 。 而这些指令数据 , 涉及了读取和写入 , 也就是内存 。 CPU的速度不用多说 , 是极快的 , 但是读取和写入内存这个操作却远远跟不上CPU的处理速度 , 如果每条指令都得等从内存中存取 , 那就太影响效率了 。 所以这时候 , CPU中就加了一层高速缓存 , 作为内存与CPU之间的缓冲 。
将每次运算需要使用到的数据复制到缓存中 , 让运算能够快速进行 , 当运算处理结束后 , 再从缓存同步回内存 , 这样CPU就不用执行每条指令都等内存了 。
2.高速缓存在多线程模式下的缓存一致性问题虽然高速缓存成功的解决了处理器与内存间的矛盾 , 但是它也为计算机系统带来了更高的复杂度 , 那就是多线程情况下的缓存一致性 。
首先假设我们有4个CPU , 每个CPU都有自己的高速缓存 , 但是主内存就只有一个 , 是共享的 。
如果他们共享使用的数据不是同一个就算了 , 万一用到了同一个变量 , 就会出问题了 。
例如简单的a=1 , a=a+1 , a=a+1 , a=a+1 , a=a+1 , 就是a加了4次1 , 结果应该是5 。 但这时我们使用了多线程 , 4个CPU同时执行 , 刚好每个线程执行一次a+1 。 它们首先先把a的值读取到高速缓存中 , 然后进行a+1的运算 , 得到结果后再把高速缓存中的a同步回内存 。 那么结果会是5吗?很显然 , 不一定 。 说不定结果是2 , 也可能是3 , 也可能是4或5 。 如果CPU在读取a的值时 , 其他CPU没有得出结果并返回赋值给内存 , 那结果肯定是2 。
这就是缓存一致性 , 通常这种多个线程访问的变量 , 被称之为【共享变量】 。
3.解决缓存不一致的问题知道了问题 , 就要想办法解决 。
早期的CPU是通过在总线上加LOCK#锁的方式解决的 , 因为CPU和其他部件的通信都是通过总线的 , 总线上加LOCK#锁的话 , 就会阻塞CPU对其他部件的访问 。 从而使同一时间 , 只有一个CPU能访问内存 , 其他CPU在总线上被锁了 , 只能干巴巴的等着这个CPU处理完 。 这种方式其实就是强制单线程执行 , 而且过于简单粗暴 , 非常影响效率 。
上面这种解决方式显然并不完美 , 所以后面就出了一个新的解决方法:缓存一致性协议 。
通过协议解决 , 最出名的缓存一致性协议是Intel的MESI协议 , 它的核心思想是 , 当CPU在写入数据时 , 如果发现操作的变量是共享变量 , 就会发出信号通知其他的CPU将该变量的缓存设置为无效状态 。 这样当其他CPU需要读取这个变量使用时 , 就会发现自己缓存中的变量失效了 , 只能重新去内存读取 。
结构大概如图:
对于高速缓存 , 我们就了解到这了 , 更多关于这块的详细内容 , 我会后期继续发布讲解 。
相关经验推荐
- 耳机|中价位HiFi大杀器,简单说说山灵M7发烧音乐播放器
- 电池|家里停电怎么给手机充电?原来方法这么简单,用电视遥控器就可以
- 固态硬盘|条件格式中,除了填充背景外,还可以设置图标集,简单且好用!
- 微信|微信能发送“带声音的图片”,一分钟学会!方法超简单
- |还在花钱找人清理洗衣机?只需3步,脏东西自己跑出来,超简单!
- 一加科技|红米K50赢了?和一加Ace对比后,事情并不简单
- 蓝牙耳机|主动降噪和低延迟,SoudPeats Air3 Pro蓝牙耳机轻体验
- 云从科技|圈粉靠的不止好音质!OPPO Enco Air2 Pro这些配置有点顶
- 耳机|来点猛的:不用再馋AirPods Max了,绿联头戴式耳机很绝
- 安卓|2022年百元性价比游戏耳机测评:iKF Find Air四代
