什么是伪共享(false sharing)

本文介绍了CPU缓存架构、缓存行以及伪共享现象,指出多线程中不同核心对同一缓存行内的独立变量操作可能导致性能下降。通过填充额外字段、自定义类型或使用Java的`@sun.misc.Contended`注解可以避免伪共享,从而提升并发性能。同时提到了volatile关键字在内存屏障中的作用,保证可见性和有序性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天看go的sync.pool的代码,发现了一个比较陌生的名词 false sharing , 之前没听说过,就去查了下,瞬间学到了

type poolLocal struct {
   poolLocalInternal

   // Prevents false sharing on widespread platforms with
   // 128 mod (cache line size) = 0 .
   pad [128 - unsafe.Sizeof(poolLocalInternal{})%128]byte
}

什么是false sharing

这里需要解决这几个问题

(1)什么是cpu缓存行

(2)什么是内存屏障

(3)什么是伪共享

(4)如何避免伪共享

CPU缓存架构

cpu是计算机的心脏,所有运算和程序最终都要由他来执行。

主内存RAM是数据存在的地方,CPU和主内存之间有好几级缓存,因为即使直接访问主内存相对来说也是非常慢的。

如果对一块数据做相同的运算多次,那么在执行运算的时候把它加载到离CPU很近的地方就有意义了,比如一个循环计数,你不想每次循环都到主内存中去取这个数据来增长它吧。

越靠近CPU的缓存越快也越小

所以L1缓存很小但很快,并且紧靠着在使用它的CPU内核。

L2大一些,但也慢一些࿰

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小卒曹阿瞒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值