併發CPU僞共享及解決

僞共享

緩存系統中是以緩存行(cache line)爲單位存儲的。緩存行是2的整數冪個連續字節,一般爲32-256個字節。最常見的緩存行大小是64個字節。當多線程修改互相獨立的變量時,如果這些變量共享同一個緩存行,就會無意中影響彼此的性能,這就是僞共享。緩存行上的寫競爭是運行在SMP系統中並行線程實現可伸縮性最重要的限制因素。有人將僞共享描述成無聲的性能殺手,因爲從代碼中很難看清楚是否會出現僞共享。

解決 

 Disruptor中:

在JDK 8 提供了一種消除僞內存的方式(需要使用JDK8 ,JDK12 不支持):

1、在code中添加sun.misc.Contended註解;
2、將JVM參數配添加上-XX:-RestrictContended;

參考1:https://blog.csdn.net/rrrfff/article/details/44993183
參考2:http://ifeve.com/falsesharing/comment-page-1/

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章