并发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/

 

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