在并發(fā)編程過程中,我們大部分的焦點都放在如何控制共享變量的訪問控制上(代碼層面),但是很少人會關注系統(tǒng)硬件及 JVM 底層相關的影響因素。前段時間學習了一個牛X的高性能異步處理框架 Disruptor,它被譽為“最快的消息框架”,其 LMAX 架構能夠在一個線程里每秒處理 6百萬 訂單!在講到 Disruptor 為什么這么快時,接觸到了一個概念——偽共享( false sharing ),其中提到:緩存行上的寫競爭是運行在 SMP 系統(tǒng)中并行線程實現(xiàn)可伸縮性最重要的限制因素。由于從代碼中很難看出是否會出現(xiàn)偽共享,有人將其描述成無聲的性能殺手。

本文僅針對目前所學進行合并整理,目前并無非常深入地研究和實踐,希望對大家從零開始理解偽共享提供一些幫助。

偽共享的非標準定義為:緩存系統(tǒng)中是以緩存行(cache line)為單位存儲的,當多線程修改互相獨立的變量時,如果這些變量共享同一個緩存行,就會無意中影響彼此的性能,這就是偽共享。

下面我們就來詳細剖析偽共享產(chǎn)生的前因后果。首先,我們要了解什么是緩存系統(tǒng)。

 

網(wǎng)友評論