мы сталкиваемся с проблемами производительности, и одним из потенциальных виновников является централизованное использование волатильного синглтона. конкретный код имеет вид
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-way box, и мы видим, что переключение контекста на 500 000 в секунду. типичные системные ресурсы в порядке - 25% процессор, 25% памяти, низкий уровень ввода-вывода, отсутствие поискового вызова и т.д.
использует ли измененное поле барьер памяти или перезагрузка любого типа процессора? или он просто идет после основной памяти каждый раз, только для этого поля?