如何编写cpu缓存友好的代码

空间局部性原理
分配连续紧凑的内存,且最好不要超过catch line的大小


时间局部性原理
尽量重复使用同一个变量,使其保持在寄存器中




因为cpu的MESI的存在,要尽量避免伪共享
将共享在多线程间的数据进行隔离
1、增大数组元素的间隔使得不同线程存取的元素位于不同的cache line上
2、在每个线程中创建全局数组各个元素的本地拷贝,然后结束后再写回全局数组


考虑清楚哪些变量是不变的,哪些是经常变化的,哪些变化是完全相互独立的,哪些属性一起变化
将该对象属性分组,将一起变化的放在一组,与其他属性无关的属性放到一组,将不变的属性放到一组
1、Padding 方式
2、Contended注解方式
```java
@sun.misc.Contended
@SuppressWarnings("restriction")
public class ContendedData {
    int value;
    long modifyTime;
    boolean flag;
    long createTime;
    char key;
}
```
3、Disruptor
一个线程内通信框架,用于线程里共享数据。它确保任何数据只由一个线程拥有以进行写访问,从而消除写争用的设计


数组比链表、树更具有缓存友好性






http://geek.csdn.net/news/detail/114619







你可能感兴趣的:(如何编写cpu缓存友好的代码)