Structuri de date: Your Quick Intro to Circular Buffers

2 mai, 2019 – 4 min citește

.

Fotografie de James Thomas pe Unsplash

Ați deschis vreodată calculatorul și ați început să tastați parola doar pentru a vedea un decalaj major în ceea ce tastați? Acest decalaj apare atunci când procesorul computerului se trezește și își dă seama că trebuie să înceapă să preia date de la mini-procesorul din tastatură. Dar cum sunt stocate aceste informații dacă există doar un spațiu foarte mic în memoria tastaturii?

Aici intervine bufferul circular.

Bufferul circular este un anumit tip de coadă. Acum, dacă nu sunteți familiarizați cu o coadă, s-ar putea să o cunoașteți ca o linie. (Ca atunci când așteptați la coadă pentru a folosi toaleta.) Această coadă este o structură de tip primul intrat, primul ieșit (FIFO). Asta înseamnă că prima persoană care intră într-o coadă este prima persoană care iese. Deci, ce este diferit la o coadă circulară?

Un buffer circular stochează datele într-o matrice de dimensiuni fixe. Deci, odată ce dimensiunea este stabilită și bufferul este plin, cel mai vechi element din buffer va fi împins afară dacă se adaugă mai multe date. Prin stocarea a doi pointeri către partea din față și cea din spate a structurii, nu este necesară manipularea dinamică a tabloului.

Cu toate acestea, dacă bufferul este plin și trebuie să adăugați ceva nou, pur și simplu setați elementul de listă indicat de pointerul din spate la noul element și incrementați pointerul din spate cu unu. Frontul va indica acum cel mai recent element adăugat.

Această tehnică de alocare a memoriei are avantaje atunci când lucrați cu o mulțime de date în timp real. Pe măsură ce se adaugă mai multe date în structură, datele vechi vor fi eliminate, astfel încât nu va fi nevoie să se deplaseze niciodată date. După cum s-a spus mai înainte, indicatorii doar schimbă pozițiile.

Acum să ne întoarcem la tastatură și la introducerea parolei. Toate apăsările de taste sunt păstrate într-un buffer circular. Așadar, dacă ați tasta destul de repede, ați putea pierde o parte din datele de intrare primite de la apăsarea tastelor.

Un restaurant cu buffer circular prost desenat.

Pentru a vă ajuta să vă imaginați bufferul circular, să construim un restaurant automat. Acest restaurant are un singur ghișeu de preluare (partea din spate a tamponului), de unde un singur client la un moment dat își poate prelua masa (datele). În spatele ghișeului se află o masă rotativă, circulară, care conține 8 mese (tamponul). Există, de asemenea, o lumină care indică spre partea din față a mesei (sau spre partea din față a tamponului). De fiecare dată când se ia o masă de la fereastră, masa se rotește cu un punct în sensul acelor de ceasornic.

Când bucătarul a terminat de gătit o masă, o așează cu un punct în fața locului care este luminat. Lumina strălucește apoi asupra vasului nou plasat. Dacă tamponul este plin și o mâncare este gata să iasă de pe aragaz, mâncarea de la fereastră va fi aruncată la gunoi. Masa se va roti, iar noua mâncare va fi așezată în locul gol.

Cazuri de utilizare

Un instructor mi-a povestit odată despre o firmă de tehnologie de realitate augmentată care folosea un buffer circular pentru a păstra cadrele mișcărilor introduse de utilizator. Aceștia înregistrau mișcările mâinilor și ale corpului utilizatorului și le transmiteau pe un ecran în timp real. Dacă un utilizator introducea o mulțime de mișcări într-o perioadă scurtă de timp, mișcările erau stocate.

Când derulați câteva minute dintr-un film sau o emisiune TV în streaming, acele cadre anterioare au fost stocate într-un buffer circular, astfel încât să poată fi accesate rapid. Dacă derulați înapoi mai multe cadre decât sunt stocate în buffer, va dura mai mult timp pentru a reîncărca cadrele pe care le căutați.

În concluzie, dacă aveți nevoie să accesați rapid date de streaming care au fost deja observate sau utilizate, un buffer circular ar putea fi o soluție bună!

Lasă un răspuns

Adresa ta de email nu va fi publicată.