如何写出缓存友好的代码(一)
本周三(2020-09-23)我进行了disruptor的分享,其中disruptor的一个优化就是缓存友好。
我就上网搜了资料,分享下在实际工作中,如何写出缓存友好的代码。
0 缓存简介
wiki链接:Cache_(computing))
计算机缓存的产生是一下两种情况的权衡:
- 大小和速度(缓存越大,意味着物理距离上越远,这样就会影响处理速度)
- 前进但昂贵的的存储技术和便宜但容易制造的存储技术(前者比如SRAM,后者比如DRAM或硬盘)
缓存有两个优势:
- 延迟
- 吞吐量
现在的计算机缓存有如下两个局部性原理:
- 时间局部性,基于假设:最近引用的对象在不久的将来大概率会再次引用
Temporal Locality: If an address gets accessed, then it is very likely that the exact same address will be accessed once again in the near future.
int a = 1;
// 'a' will hopefully be used again soon
- 空间局部性,基于假设:需要引用的对象周围的对象大概率会被引用
Spatial Locality: If an address gets accessed, then it is very likely that nearby addresses will be accessed in the near future.
int[] arr = new int[10];
arr[5] = 10;
// 'A[4]' or 'A[6]' will hopefully be used soon
参考资料:Writing Cache-Friendly Code
最后修改于 2020-09-25