缓存行 Cache line

本文通过两个示例展示了缓存行对齐在多线程环境中的影响。T01_CacheLinePadding 示例中,由于变量x未进行缓存行对齐,导致两个线程在更新不同对象的x时产生伪共享,影响性能。而T02_CacheLinePadding 则通过填充避免了伪共享,提高了并发效率。通过对比运行时间,可以看出缓存行对齐对于多线程程序的性能提升显著。
摘要由CSDN通过智能技术生成

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


Cache line

cache line
cpu读取内存指令默认是读取一行,大小为64Byte。
位于同一缓存行的两个不同数据,被两个不同CPU锁定,产生互相影响的伪共享问题
public class T02_CacheLinePadding {
private static class Padding {
public volatile long p1, p2, p3, p4, p5, p6, p7;
}

private static class T extends Padding {
    public volatile long x = 0L;
}

public static T[] arr = new T[2];

static {
    arr[0] = new T();
    arr[1] = new T();
}

public static void main(String[] args) throws Exception {
    Thread t1 = new Thread(()->{
        for (long i = 0; i < 2; i++) {
            arr[0].x = i;
            System.out.println("1  " + i);
        }
    });

    Thread t2 = new Thread(()->{
        for (long i = 0; i < 2; i++) {
            arr[1].x = i;
            System.out.println("2  " + i);
        }
    });

    final long start = System.nanoTime();
    t1.start();
    t2.start();
    t1.join();
    t2.join();
    System.out.println((System.nanoTime() - start)/100_0000);
}

}

public class T01_CacheLinePadding {
private static class T {
public volatile long x = 0L;
}

public static T[] arr = new T[2];

static {
    arr[0] = new T();
    arr[1] = new T();
}

public static void main(String[] args) throws Exception {
    Thread t1 = new Thread(()->{
        for (long i = 0; i < 1000_0000L; i++) {
            arr[0].x = i;
        }
    });

    Thread t2 = new Thread(()->{
        for (long i = 0; i < 1000_0000L; i++) {
            arr[1].x = i;
        }
    });

    final long start = System.nanoTime();
    t1.start();
    t2.start();
    t1.join();
    t2.join();
    System.out.println((System.nanoTime() - start)/100_0000);
}

}
使用缓存行的对齐能够提高效率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值