59、内核同步中的缓存效应、伪共享与无锁编程

内核同步中的缓存效应与无锁编程解析

内核同步中的缓存效应、伪共享与无锁编程

1. 缓存效应与伪共享

现代处理器采用多级并行缓存内存,以显著提升内存操作速度。当软件请求读取某个地址的一个字节时,CPU 实际上会从该起始地址读取一整个缓存行(通常为 64 字节)的数据到各级 CPU 缓存(如 L1、L2 和 L3)中。后续访问连续内存中的元素时,会先在缓存中查找,若命中则能大幅提升速度。因为访问 CPU 缓存通常只需 1 到几个纳秒,而访问 RAM 则需要 50 到 100 纳秒。

软件开发人员会利用这些特性,采取以下做法:
- 将数据结构的重要成员放在一起(最好在同一个缓存行内),并置于结构顶部。
- 对结构成员进行填充,避免跨越缓存行。

然而,这也存在风险。例如,声明两个相邻的变量 u16 ax = 1, bx = 2; ,它们很可能在运行时占用同一个 CPU 缓存行。在多核系统中,若线程 T1 在 CPU 0 上操作变量 ax ,线程 T2 在另一个 CPU 核心上同时操作变量 bx ,当 T1 从主内存访问 ax 时,其 CPU 缓存会同时加载 ax bx 的值;同理,T2 访问 bx 时,其 CPU 缓存也会加载两个变量的值。

若 T1 对 ax 执行 ax ++ 操作,同时 T2 对 bx 执行 bx ++ 操作,就会出现缓存一致性问题。处

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值