程序员容易忽视的伪共享问题

原文链接https://zhuanlan.zhihu.com/p/22755195

这个问题比较深,估计我目前是接触不到。但还是很有必要分享一下。建议直接看原文。

由于并发的原因,会出现两个变量共用一个缓存块,所以当一个线程改变其中一个变量的时候,那么所有含当前变量的缓存块将会失效,那么失效缓存块中的另一个变量也会失效。那么当其他线程访问这个变量时它却失效了,那么得重新从内存里读取,那缓存没有让性能变快,反而变慢了。这个就是伪共享。

举例子

内存的一个块里有a和b两个变量,那么两个线程A和B中分别会加载一个缓存,a和b变量一定也都在缓存里面的一个块内。当A线程改变了a值时,B线程的缓存里面包含a变量的块就会失效,与此同时和a同一个块内的b变量也随着块失效而失效了。当这个时候B线程访问b变量时,就得重新去内存里读取,读取速度反而比直接去内存读取慢了(因为内存读写慢,才会有高速缓存来提高性能)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值