伪共享问题

先来了解一些相关的概念

缓存行(Cache Line):是缓存系统中的缓存单位;现代中央处理器的缓存系统中是以缓存行为单位存储的。

缓存一致性:根据主流CPU为保证缓存有效性的MESI协议的简单理解,如果一个核正在使用的数据所在的缓存行被其他核修改,那么这个缓存行会失效,需要重新读取缓存。
(在某时刻,一份缓存可能会存在于不同的缓存空间内;缓存一致性要求各个缓存区间内的同一份缓存必须一致,否则该缓存视为无效。)

伪共享问题:

当多线程修改互相独立的变量时,如果这些变量恰好共享同一个缓存行,就会彼此影响(写回、无效化或者同步)而导致性能降低。

例子:

现有两个没多大关系的变量a和变量b,
也有两个没多大关系的线程A和线程B;
其中线程A要改变变量a的值,而线程B要改变变量b的值。
此时,变量a和变量b在同一个缓存行,且该缓存行存在不同的缓存区中(假如存在于甲缓存区和乙缓存区,线程A恰好访问的是甲,线程B恰好访问的是乙)。

线程A先对甲缓存区读取并改变了缓存行中的变量a;

此时,甲缓存区中的缓存行数据与乙缓存区的不一致了(即乙缓存区的这个缓存行已无效)。

如此一来,线程B想修改变量b,只能将变量b重新载入缓存区。

参考连接
伪共享简介–XHLeee
有点java基础就能看懂的【伪共享】详解加面试–IT楠老师

这仅是个人理解,未经考验;如有错漏,恳请指点、反馈。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值