多執行緒 LongAdder

2022-10-08 23:54:22 字數 849 閱讀 8394

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方法

**大致流程圖

待續。。。。

AtomicLong和LongAdder的區別

最近在看到不少框架裡面使用到了longadder這個類,而並非atomiclong,很是困惑,於是專門看了longadder的原始碼,總結一下這兩個的區別。就像我們所知道的那樣,atomiclong的原理是依靠底層的cas來保障原子性的更新資料,在要新增或者減少的時候,會使用死迴圈不斷地cas到特定...

AtomicLong和LongAdder的區別

atomiclong和longadder的區別 最近在看到不少框架裡面使用到了longadder這個類,而並非atomiclong,很是困惑,於是專門看了longadder的原始碼,總結一下這兩個的區別。就像我們所知道的那樣,atomiclong的原理是依靠底層的cas來保障原子性的更新資料,在要新...

AtomicLong與LongAdder的區別

atomiclong的原理 atomiclong是通過依靠底層的cas來保障原子性的更新資料,在要新增或者減少的時候,會使用死迴圈不斷地cas到特定的值,從而達到更新資料的目的。longadder的原理 longadder是在atomiclong的基礎上將單點更新壓力分散到各個節點,在低併發的時候通...