多线程-LongAdder

LongAdder 源码如下
cell的代码
image
其中Contended注解主要是为了解决不同缓存行数据失效的问题
由于cpu的速度和内存的速度差距太大,在cpu从内存读取数据到寄存器之间有三级缓存(l1,l2,l3),可以提升读取效率(详细可见操作系统)假设cpu1(核心1),cpu2(核心2)同时从内存读取cell[A],cell[B]的数据(cell 数组是连续的数据,会一起读进缓存),这回使得A,B的数据会在三级缓存里有副本,如果cpu1对cell[A]数据进行了更改,那么cpu2的缓存里的数据就应该失效。

image

Contended注解会让使用拥有改注解对是在其前后增加字节,从而让cpu讲对象预读至缓存时占用不同的缓存行(数据存储同一个缓存行会导致失效)

image

image

LongAdder.add方法
image

代码大致流程图
image

待续。。。。

posted @ 2022-03-17 15:05  原来是晴天啊  阅读(47)  评论(0编辑  收藏  举报