Strutture di dati: La tua rapida introduzione ai buffer circolari

2 maggio, 2019 – 4 min read

Foto di James Thomas su Unsplash

Hai mai aperto il tuo computer e iniziato a digitare la tua password solo per vedere un grande ritardo in quello che stai scrivendo? Questo ritardo avviene quando il processore del computer si sveglia e si rende conto che ha bisogno di iniziare a prendere i dati dal mini processore nella tastiera. Ma come vengono memorizzate queste informazioni se c’è solo un piccolo spazio nella memoria della tastiera?

Ecco dove entra in gioco il buffer circolare.

Il buffer circolare è un certo tipo di coda. Ora, se non avete familiarità con una coda, potreste conoscerla come una linea. (Questa coda è una struttura FIFO (first in, first out). Ciò significa che la prima persona che entra in una fila è la prima ad uscire. Cosa c’è di diverso in una coda circolare?

Un buffer circolare memorizza i dati in un array a dimensione fissa. Quindi, una volta che la dimensione è impostata e il buffer è pieno, l’elemento più vecchio nel buffer sarà spinto fuori se vengono aggiunti altri dati. Memorizzando due puntatori alla parte anteriore e posteriore della struttura, non c’è bisogno di manipolare dinamicamente l’array.

Tuttavia, se il buffer è pieno e avete bisogno di aggiungere qualcosa di nuovo, impostate semplicemente l’elemento della lista indicato dal puntatore posteriore al nuovo elemento e incrementate il puntatore posteriore di uno. Il fronte ora punterà all’elemento aggiunto più recentemente.

Questa tecnica di allocazione della memoria ha dei vantaggi quando si lavora con molti dati in tempo reale. Man mano che altri dati vengono aggiunti alla struttura, i vecchi dati verranno rimossi, quindi non ci sarà mai bisogno di spostare i dati. Come detto prima, i puntatori spostano solo le posizioni.

Ora torniamo alla tastiera e all’inserimento della password. Tutte le vostre battute sono tenute in un buffer circolare. Quindi, se digitate abbastanza velocemente, potreste potenzialmente perdere parte dell’input ricevuto dai tasti.

Un ristorante con buffer circolare mal disegnato.

Per aiutare a immaginare il buffer circolare, costruiamo un ristorante automatico. Questo ristorante ha un’unica finestra di ritiro (il retro del buffer) dove un cliente alla volta può ritirare il suo pasto (i dati). Dietro la finestra c’è un tavolo rotante e circolare che contiene 8 pasti (il buffer). C’è anche una luce che punta alla parte anteriore del tavolo (o alla parte anteriore del buffer). Ogni volta che un pasto viene preso dalla finestra, il tavolo ruota in senso orario di un punto.

Quando il cuoco ha finito di cucinare un pasto, lo mette un punto davanti al posto che è illuminato. La luce quindi brilla sul piatto appena posizionato. Se il buffer è pieno e un piatto è pronto per essere tolto dai fornelli, il piatto alla finestra sarà gettato nella spazzatura. Il tavolo ruoterà, e il nuovo pasto sarà posizionato nel posto vuoto.

Casi d’uso

Un istruttore una volta mi ha parlato di un’azienda tecnologica di realtà aumentata che usava un buffer circolare per conservare i fotogrammi dei movimenti inseriti dall’utente. Registravano il movimento della mano e del corpo dell’utente e lo trasmettevano in tempo reale su un display. Se un utente immetteva molti movimenti in un breve periodo di tempo, i movimenti sarebbero stati memorizzati.

Quando si riavvolge qualche minuto di un film o di un programma televisivo in streaming, quei fotogrammi precedenti sono stati memorizzati in un buffer circolare in modo da potervi accedere rapidamente. Se riavvolgete più fotogrammi di quelli memorizzati nel buffer, ci vorrà più tempo per ricaricare i fotogrammi che state cercando.

In conclusione, se avete bisogno di accedere rapidamente ai dati in streaming che sono già stati osservati o utilizzati, un buffer circolare potrebbe essere una buona soluzione!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.