La Cache

Un semplice esempio


Per capire che cosè la cache e come funziona facciamo un semplice esempio che usa un bibliotecario per dimostrare il concetto di base. Supponiamo che abbia una bella scrivania all'entrata della biblioteca e che spetti a lui cercare e consegnare i libri richiesti dai clienti. Cominciamo da un bibliotecario senza cache.

Il primo cliente arriva e chiede di poter avere il libro Moby Dick. Il bibliotecario si alza, cerca il libro nella stanza degli scaffali, torna dal cliente e glielo consegna. Dopo qualche tempo il libro viene riconsegnato dal cliente, il bibliotecario torna nella stanza degli scaffali e lo ripone dove lo aveva trovato l'ultima volta.
Qualche giorno dopo arriva un altro cliente che chiede ancora Moby Dick. Il bibliotecario si alza, cerca il libro nella stanza degli scaffali, torna dal cliente e glielo consegna, proprio come aveva fatto con il primo cliente. Con questo modo di lavorare, il bibliotecario è costretto a fare sempre lo stesso iter, anche se alcuni libri (come Moby Dick) vengono richiesti più spesso di altri.
C'è un modo per migliorare questo modo di lavorare ?

Un modo c'è ed è quello del bibliotecario con la cache. Supponiamo di dare al bibliotecario uno scaffaletto vicino alla sua scrivania su cui può riporre fino a 10 libri. Rifacciamo l'esempio precedente usando questa cache da 10 libri!

Arriva il primo cliente e chiede al bibliotecario Moby Dick. Il bibliotecario si alza, cerca il libro nella stanza degli scaffali, torna dal cliente e gli consegna il libro, proprio come aveva fatto il bibliotecario senza cache. Qualche giorno dopo il libro viene restituito ma il bibliotecario non lo ripone nella stanza degli scaffali da cui lo aveva preso, ma nel suo nuovo scaffaletto da 10 libri.
Dopo un po arriva il secondo cliente che gli chiede ancora una volta Moby Dick. A questo punto il bibliotecario prima di alzarsi ed andare nella stanza degli scaffali controlla se il volume si trova nello scaffaletto al suo fianco. Lo trova, quindi lo consegna al cliente senza nemmeno dover lasciare la sua scrivania, risparmiando il viaggio nell'altra stanza e servendo il cliente con molta più efficienza.

L'esempio appena visto è un classico esempio di ottimizzazione delle prestazioni ottenibili con la cache.

Cosa sarebbe successo però se il cliente avesse chiesto un volume non presente nello scaffaletto? In quel caso il bibliotecario sarebbe stato meno efficiente perchè avrebbe controllato a vuoto lo scaffaletto per poi finire col prendere il libro nell'altra stanza.

Il tempo perso per l'attività aggiuntiva (il controllo dello scaffaletto) è detto tempo di latenza e nel caso del bibliotecario è comunque piccolissimo se comparato al tempo necessario per alzarsi, andare nell'altra stanza e prendere il libro richiesto.

Dall'esempio è possibile dedurre alcune cose importanti riguardanti la cache.
  • La cache usa una memoria piccola ma veloce per accellerare una memoria grande ma lenta
  • Qualsiasi tipo di ricerca deve essere effettuata prima nella cache. Se l'oggetto ricercato viene trovato avremo un cache hit, in caso contrario un cache miss che ci costringerà ad effettuare la ricerca nella memoria più grande (e più lenta)
  • Una cache ha un dimensione massima molto ma molto minore della memoria principale
  • Ci possono essere diversi livelli di cache. Nel nostro esempio del bibliotecario avevano un solo livello (lo scaffaletto da 10 libri). Potremmo pensare ad una cache di secondo livello fornendo al bibliotecario un ulteriore scaffale da 100 libri da controllare dopo lo scaffaletto e prima di andare nella stanza dei libri.