Nel ramo informatico definiamo la parola buffer come la regione di un determinato supporto di memoria atta a gestire, temporaneamente, delle informazioni mentre esse vengono trasferite tra un computer e un altro. Lo scopo principale di tale operazione è quello di ridurre le diverse velocità di elaborazione delle due unità.
Infatti, proprio in questi momenti, entra in gioco il buffer capace di sopperire a differenti velocità di lavoro di due componenti hardware (periferiche di un computer) oppure quando due software con diverse priorità (processi primari e secondari) devono poter comunicare tra loro. In questi casi, il buffering (ovvero la funzionalità di caricamento dati nella memoria di buffer) è in grado di accorciare i tempi di attesa riducendo al minimo le perdite di tempo.
Generalmente, il buffer risiede nella memoria centrale (RAM) la quale, potendo garantire una velocità di esecuzione superiore rispetto quelle di un hard disk magnetico, assicurerà dei tempi di risposta molto più efficienti. Volendo entrare un attimino nello specifico, il buffering è gestito attraverso algoritmi FIFO (“first-in, first-out”). Questo garantirà l’utilizzo di differenti tempistiche di scrittura e lettura delle informazioni all’interno della memoria centrale.
Buffer: differenza tra software e hardware
Come abbiamo accennato precedentemente, il buffer può essere implementato e coordinato sia a livello software (un programma individua la porzione di memoria buffer e gestirà poi i flussi dati in ingresso e uscita) che hardware (attraverso l’utilizzo di supporti di memoria). Oggi è possibile utilizzare entrambi i metodi ma, la soluzione software, è di gran lunga la più utilizzata; con la sua più semplice implementazione infatti, garantisce performance nettamente superiori rispetto all’implementazione software del buffer.
In quali contesti ci si appoggia alla memoria buffer?
In primo luogo, viene utilizzata nella comunicazione tra componenti hardware che lavorano a velocità differenti (un processore elabora molto più velocemente rispetto all’acquisizione di informazioni da parte della tastiera). Il buffering cerca di eliminare i tempi di attesa riducendo al minimo i tempi morti causati da velocità basse di alcuni dispositivi di input o output. Un esempio tra tutti è la stampa di un documento.
Il processore, dopo aver elaborato le informazioni da stampare, li “appoggia” nella memoria di buffering in modo da poter lavorare su un diverso processo riducendo quindi i tempi complessivi senza preoccuparsi dei tempi di esecuzione della stampante. Sarà infatti interesse di quest’ultima andare a pescare le informazioni dal buffer senza interrogare il processore.
Buffering in rete (streaming video)
In rete, il buffering invece, nel caso in cuoi due nodi di rete devono scambiare una mole elevate di informazioni, potrebbero voler accedere alla memoria buffer per mantenere questi dati fino a che il canale di comunicazione desiderato non si liberi per la comunicazione. Si tratta di una procedura di estrema importanza nel campo del networking perché, nel caso in cui i dati da inviare eccedano rispetto le capacità della rete, l’hub farà uso del buffer il quale si occuperà dello smaltimento della coda.
Un altro caso di particolare interesse per quanto concerne il buffering di rete, lo troviamo nel campo dello streaming video.
In quel caso l’applicazione web di interesse per la visione di un filmato, caricherà parte dei dati prima di avviare la riproduzione. Questo permetterà, nel caso in cui ci sia un blocco del flusso di alcuni secondi, la continuazione della visione senza causare particolari problemi.
La volontà di vedere un filmato in alta definizione provocherà un caricamento più lento rispetto ad uno streaming in bassa definizione. Ecco perché, se ci avvaliamo di connessioni di rete poco veloci, faremo fatica con lo streaming video in HD.