Questa domanda si riferisce alla domanda qui , ma generalizzerò in modo che tu possa rispondere in modo efficace senza leggere tutto ciò.
Contesto:
Immagina di avere un grande set di dati più grande della RAM disponibile che è stata partizionata in blocchi.
(Ridimensionato in modo tale che l'accesso sia stato elaborato in modo efficiente dai gestori di memoria virtuale ecc.) .
Un'applicazione con una GUI richiede a un utente di registrare un processo sequenziale che richiederà l'accesso a sezioni di questi dati nel tempo.
In tempo reale questo sarebbe gestito da una sorta di cache LRU per l'utente in modo da ottenere un feedback (forse con una risoluzione inferiore per tenere conto della latenza). I dati richiesti, ma non nella RAM, verrebbero caricati sostituendo i dati meno recenti contrassegnati come "utilizzati meno di recente" ...
But now instead, imagine that I know the sequence in advance - i.e. I effectively have look-ahead/clairvoyance of future memory access requirements.
Si presume che la dimensione (in GB / qualunque) dei dati unici richiesti integrati nell'intera sequenza sia superiore alla quantità di RAM disponibile (almeno il doppio).
Domande:
Quali algoritmi / strategie ottimale sono lì per gestirlo nel caso di:
- È necessario "riprodurre" la sequenza in una sorta di modalità psuedo-realtime (sequenziale) per un utente.
- Hai bisogno di elaborarlo il più velocemente possibile in modo "non in linea" non sequenziale.
Immagina il caso peggiore in cui i dati fossero richiesti "on e off", ma spesso in tutta la sequenza - ovvero il periodo di requisiti è appena trascorso il periodo in cui una strategia LRU, LFU imporrebbe "no" -necessario'. Ma con la maggior parte delle definizioni di ottimali preferiamo semplicemente tenerlo nella RAM, giusto?
Aggiornamento: dovrebbe notare, sto memorizzando nella cache i dati input - gli output della funzione effettiva dell'applicazione non hanno alcuna (utile) relazione tra le iterazioni.