De lo que estás hablando es del encadenamiento de dependencia de por vida, una cosa depende de otra que se puede modificar fuera de su control.
Si usted tiene una función idempotente de a
, b
a c
donde, si a
y b
son los mismos a continuación c
es el mismo pero el costo de la comprobación b
es alta, entonces ya sea:
- acepta que que en algún momento de operar con información obsoleta y no siempre se comprueba
b
- hacer su mejor nivel para hacer la comprobación
b
lo más rápido posible
No se puede tener su pastel y comérselo ...
Si puede capa un caché adicional basada en a
sobre la parte superior, entonces esto afecta el problema inicial no un bit. Si eliges 1, entonces tienes la libertad que te hayas dado y puedes almacenar más en caché, pero debes recordar considerar la validez del valor en caché de b
. Si elige 2, igualmente debe marcar b
cada vez, pero puede recurrir a la memoria caché para a
si b
se retira.
Si capas cachés debe considerar si ha violado las 'reglas' del sistema como resultado del comportamiento combinado.
Si sabe que a
siempre tiene validez si b
hace, entonces usted puede arreglar su caché como tal (pseudocódigo):
private map<b,map<a,c>> cache //
private func realFunction // (a,b) -> c
get(a, b)
{
c result;
map<a,c> endCache;
if (cache[b] expired or not present)
{
remove all b -> * entries in cache;
endCache = new map<a,c>();
add to cache b -> endCache;
}
else
{
endCache = cache[b];
}
if (endCache[a] not present) // important line
{
result = realFunction(a,b);
endCache[a] = result;
}
else
{
result = endCache[a];
}
return result;
}
estratificación Obviamente sucesiva (por ejemplo x
) es trivial, siempre que, en cada etapa la validez de la entrada recién agregada coincide con la relación a
: b
para x
: b
y x
: a
.
Sin embargo, es muy posible que pueda obtener tres entradas cuya validez era completamente independiente (o que era cíclica), por lo que no sería posible la creación de capas. Esto significaría la línea marcada // importante tendría que cambiar a
si (endCache [a] caducado o no está presente)
Creo que tiene algo que ver con escribir X Windows – Greg
Creo que ese título sería mejor que "Invalidación de caché: ¿hay una solución general?" ya que se refiere a una clase específica de problema de almacenamiento en caché. – RBarryYoung
No, él no sabía mucha informática. Estoy seguro de que su participación en la creación de OpenGL, X11 y SSLv3 lo puso demasiado ocupado para estudiarlo realmente. :-) –