为了解决cpu运行速度和内存速度不匹配的问题,引入了cpu三级缓存,L1,L2,L3.其中缓存是以缓存行为基本单位的,每次取数据都是取一个缓存行的数据,批量读取。所以肯能会出现多个cpu共享缓存行时,需要进行同步数据的工作。下面就是通过将共享数据放入两个缓存行来提高运行速度的例子,Java中的Thread类也有@Contented也是类似作用。
注意:一般64位的计算机,缓存行为64个字节。
public class TestCpuCacheLine {
volatile long num = 0;
// long l1, l2, l3, l4, l5, l6, l7;
volatile long num1 = 0;
public static void main(String[] args) throws Exception{
long start = System.currentTimeMillis();
TestCpuCacheLine testCpuCacheLine = new TestCpuCacheLine();
Thread t1 = new Thread(() -> {
for (int i = 0; i < 10000000; i++) {
testCpuCacheLine.num++;
}
});
Thread t2 = new Thread(() -> {
for (int i = 0; i < 10000000; i++) {
testCpuCacheLine.num1++;