Credo che la risposta migliore sia che dipende. Nella mia esperienza ci sono molti fattori che vanno nella scelta degli algoritmi di cache.
Fattori da considerare
- Bilancio di lettura / scrittura. (Quale percentuale di accessi sono letti rispetto alle scritture)
- Quantità di cache.
- Tipo di supporto dietro la cache. (Sono unità SATA lente o unità SSD veloci?)
- Hits vs Misses. (Quanto spesso le cose vengono riscritte o rilette?)
- Dimensioni di accesso medie (Questo va a scegliere la dimensione della pagina)
- Quanto costose sono le letture e le scritture.
Dopo aver considerato tutti i diversi fattori, è necessario trovare un algoritmo di cache che gestisca al meglio. Ad esempio, diciamo che hai un'applicazione in cui ci sono molte scritture, alcune riscritture, letture di dati scritti di recente e qualche tipo di media girevole. In questo caso vorresti una sorta di algoritmo di caching ibrido. Per gestire i dati di scrittura potresti volere qualcosa come Wise order of Writes (WOW) e un algoritmo LRU per i dati letti dal disco. La ragione di ciò è che gli accessi al disco sono molto costosi e l'algoritmo WOW renderà più efficiente scrivere i dati e l'LRU manterrà i dati frequentemente utilizzati sempre nella cache.
Supponiamo che tu disponga di dischi SSD, che hanno un tempo di accesso molto veloce, potresti decidere di orientare la tua scelta verso l'algoritmo LRU dato che gli accessi al disco sono relativamente poco costosi.
Quindi davvero quello che voglio dire è che non esiste una risposta "migliore". La risposta migliore è conoscere i fattori che si applicano a te e scegliere un algoritmo che li gestisca al meglio.
Come trovare l'algoritmo per te
Verifica il tuo sistema. Questo di solito comporta l'aggiunta di codice per mantenere le statistiche per gli accessi alla memoria. Con il profiling puoi vedere quali fattori sono più importanti per te.
In passato ho aggiunto del codice per tenere traccia di tutti gli accessi alla memoria per un periodo di tempo. Poi più tardi cerco modelli. Cerco rilette, ri-scrive, accesso sequenziale, accesso casuale, ecc.
Una volta identificate le cose importanti, è necessario esaminare tutti i diversi tipi di algoritmi di caching per vedere quale gestire quali sono le cose migliori.