我们遇到了性能问题,一个潜在的罪魁祸首是集中使用 volatile 单例。具体代码的形式是
class foo {
static volatile instance;
static object l = new object();
public static foo Instance {
if (instance == null)
lock(l) {
if (instance == null)
instance = new foo();
}
return foo();
}
}
这是在一个 8 路盒子上运行的,我们看到上下文切换到每秒 500,000 次。典型的系统资源很好 - 25% cpu util、25% memory util、低 IO、无分页等。
使用 volatile 字段会导致内存屏障或任何类型的 cpu 缓存重新加载吗?或者它只是每次都在主内存之后,只针对那个字段?