多线程-LongAdder
LongAdder 源码如下
cell的代码
其中Contended注解主要是为了解决不同缓存行数据失效的问题
由于cpu的速度和内存的速度差距太大,在cpu从内存读取数据到寄存器之间有三级缓存(l1,l2,l3),可以提升读取效率(详细可见操作系统)假设cpu1(核心1),cpu2(核心2)同时从内存读取cell[A],cell[B]的数据(cell 数组是连续的数据,会一起读进缓存),这回使得A,B的数据会在三级缓存里有副本,如果cpu1对cell[A]数据进行了更改,那么cpu2的缓存里的数据就应该失效。
Contended注解会让使用拥有改注解对是在其前后增加字节,从而让cpu讲对象预读至缓存时占用不同的缓存行(数据存储同一个缓存行会导致失效)
LongAdder.add方法
代码大致流程图
待续。。。。