随笔-缓存一致性的理解

缓存一致性的理解

缓存一致性问题是在多线程情况下发生的。现在的中央处理器大多是有多个CPU,从内存模型来说,CPU想要从内存读取数据进行运算,需要经过这么一个路径:

  1. 先从内存中把数据复制到CPU高速缓存(现在CPU都有多级缓存)
  2. CPU从高速缓存中读取数据到寄存器,执行运算

题外话:高速缓存比内存的IO速度快很多,高速缓存的大小可以算是CPU的一个指标

回归正题,当多个CPU同时对内存中的数据进行缓存,就会引发缓存一致性问题在这里插入图片描述

如图,假设有一个变量a=0在内存中,此时CPU1和CPU2同时要对变量a进行+1计算。我们想要的结果是CPU1进行+1运算,a=2,CPU2进行+1运算,a=3,实则不然
两个CPU的运算结果是要写回内存的,CPU1写回的结果是2,CPU2写回的结果同样是2,这便是缓存一致性问题。
解决方案:

  1. 总线加锁
  2. 缓存一致性协议
总线加锁

总线加锁是基于计算机物理模型实现的,一个CPU想要与其他硬件进行交互,需要一个渠道,就是总线。总线可以理解为输送数据的管道,在这个管道上加上一把锁,只能一个CPU访问内存,那么就保证数据运算结果是唯一的,也就解决的缓存一致性问题。
但是缺点也很显而易见,那就是效率低下。有且只有一个CPU访问内存,其他CPU被阻塞,性能大大的浪费掉了。

缓存一致性协议

有空再补充

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值