Mamy problemy z wydajnością, a jednym z potencjalnych winowajców jest scentralizowane wykorzystanie lotnego singletonu. specyficzny kod ma postaćJaki jest koszt zmiennego słowa kluczowego w systemie wieloprocesorowym?
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();
}
}
ten działa na polu 8-way, i widzimy kontekst przełączania w wysokości 500000 na sekundę. typowe zasoby systemowe są w porządku - 25% wykorzystania procesora, 25% wykorzystania pamięci, niskiego IO, braku stronicowania, itp.
czy używanie niestabilnego pola indukuje barierę pamięci lub jakiegokolwiek rodzaju ponowne ładowanie cpu? czy po prostu za każdym razem chodzi o pamięć główną tylko dla tego pola?
nie, to instancja foo. – kolosy
Nie jestem pewien, dlaczego to musi być niestabilne, ponieważ nie zmieniasz odniesienia. –
Ja też nie - to czyjś kod, który debuguję. moim głównym pytaniem jest jednak, czy użycie niestabilnego tutaj może spowodować problemy z rywalizacją na wielordzeniowym pudełku x86 – kolosy