
00:00:00
外卖卷:非常划算 扫码领劵 省点小钱钱
在计算机系统中,CPU 高速缓存是处理器内部或紧邻处理器的一小块高速存储区域。它的主要目的是减少处理器访问主内存的平均时间。

| 从 CPU 到 | 大约需要的时钟周期 |
|---|---|
| 寄存器 | 1 cycle (4GHz 的 CPU 约为 0.25ns) |
| L1 | 3~4 cycle |
| L2 | 10~20 cycle |
| L3 | 40~45 cycle |
| 内存 | 120~240 cycle |
有效利用这些局部性,可以使缓存达到很高的命中率。
核心概念:CPU 缓存不是以单个字节为单位加载数据的,而是以固定的缓存行 (Cache Line) 为单位。一个缓存行通常是 64 字节(例如,可以存储 8 个 long 类型数据)。当 CPU 从主内存获取数据时,会以整个缓存行的大小加载到缓存中。因此,内存中相邻的数据会一并被加载。
问题描述:当不同线程操作独立且不相关的变量时,如果这些变量恰好位于同一个缓存行中,就会发生“伪共享”。
解决方法:
long 类型),使得原本相邻的变量落到不同的缓存行中。@Contended 注解:Java 8 引入的 @sun.misc.Contended 注解(需要配置 JVM 参数 -XX:-RestrictContended 才能生效)可以自动为字段添加填充,将其隔离到独立的缓存行。定义:当多个处理器(或核心)同时处理任务,并且它们都涉及到同一块主内存区域时,每个处理器可能会有该内存区域的缓存副本。缓存一致性协议就是为了确保在这些副本之间,数据始终保持一致。

MESI 协议:MESI (Modified Exclusive Shared Invalid) 是一种广泛使用的支持写回 (Write-Back) 策略的缓存一致性协议。它通过给每个缓存行标记四种状态来管理一致性:
作用:MESI 协议确保了在多核 CPU 环境下,对共享数据的修改能够被所有核心正确地感知和同步。
在多核 CPU 环境下,为了解决缓存数据不一致的问题,处理器提供了两种主要的机制:
总线锁定 (Bus Locking):
LOCK# 信号。这个信号会锁定整个总线,阻止其他处理器访问主内存,从而确保当前处理器对共享变量的操作是独占的。缓存锁定 (Cache Locking):
总线机制的补充说明:
volatile 关键字或 synchronized 锁(尤其是在高竞争场景下)都可能导致频繁的缓存同步和总线流量,需要根据实际场景进行权衡和优化。
评论