Struktury danych: Your Quick Intro to Circular Buffers

2 maja, 2019 – 4 min read

.

Photo by James Thomas on Unsplash

Czy kiedykolwiek otworzyłeś swój komputer i zacząłeś wpisywać swoje hasło tylko po to, aby zobaczyć poważne opóźnienie w tym, co wpisujesz? To opóźnienie ma miejsce, gdy procesor komputera budzi się i uświadamia sobie, że musi zacząć pobierać dane z miniprocesora w klawiaturze. Ale jak te informacje są przechowywane, jeśli jest tylko trochę miejsca w pamięci klawiatury?

To jest miejsce, w którym pojawia się bufor kołowy.

Bufor kołowy jest pewnym rodzajem kolejki. Teraz, jeśli nie jesteś zaznajomiony z kolejką, możesz ją znać jako linię. (Jak wtedy, gdy czekasz w kolejce do toalety.) Ta kolejka jest strukturą typu „pierwsze weszło, pierwsze wyszło” (FIFO). Oznacza to, że pierwsza osoba, która wejdzie do kolejki, jest pierwszą osobą, która z niej wyjdzie. Więc co jest innego w kolejce kołowej?

Bufor kołowy przechowuje dane w tablicy o stałym rozmiarze. Więc kiedy rozmiar jest ustawiony i bufor jest pełny, najstarszy element w buforze zostanie wypchnięty, jeśli zostanie dodane więcej danych. Przechowując dwa wskaźniki do przodu i tyłu struktury, nie ma potrzeby dynamicznego manipulowania tablicą.

Jednakże, jeśli bufor jest pełny i trzeba dodać coś nowego, po prostu ustaw element listy wskazywany przez wskaźnik tylny na nowy element i inkrementuj wskaźnik tylny o jeden. Front będzie teraz wskazywał na ostatnio dodany element.

Ta technika alokacji pamięci ma korzyści, gdy pracujesz z dużą ilością danych w czasie rzeczywistym. Gdy więcej danych jest dodawanych do struktury, stare dane zostaną usunięte, więc żadne dane nigdy nie będą musiały być przesunięte. Jak stwierdzono wcześniej, wskaźniki po prostu przesuwają pozycje.

Teraz, aby wrócić do klawiatury i wprowadzania hasła. Wszystkie twoje naciśnięcia klawiszy są przechowywane w okrągłym buforze. Więc gdybyś pisał wystarczająco szybko, potencjalnie straciłbyś część danych wejściowych otrzymanych z naciśnięć klawiszy.

Niedobrze narysowana restauracja z buforem kołowym.

Aby pomóc wyobrazić sobie bufor kołowy, zbudujmy zautomatyzowaną restaurację. Ta restauracja ma jedno okienko odbioru (tył bufora), gdzie jeden klient na raz może odebrać swój posiłek (dane). Za tym okienkiem znajduje się obrotowy, okrągły stół, który mieści 8 posiłków (bufor). Jest tam również światło, które wskazuje na przód stołu (lub przód bufora). Za każdym razem, gdy posiłek jest pobierany z okna, stół obraca się zgodnie z ruchem wskazówek zegara o jedno miejsce.

Kiedy kucharz kończy gotować posiłek, umieszcza go o jedno miejsce przed miejscem, które jest oświetlone. Światło świeci wtedy na nowo postawione danie. Jeśli bufor jest pełny i posiłek jest gotowy do zejścia z pieca, posiłek przy oknie zostanie wyrzucony do kosza. Stół obróci się, a nowy posiłek zostanie umieszczony w pustym miejscu.

Przypadki użycia

Instruktor powiedział mi kiedyś o firmie technologicznej zajmującej się rzeczywistością rozszerzoną, która używała okrągłego bufora do przechowywania klatek ruchów wprowadzanych przez użytkownika. Nagrywali oni ruchy dłoni i ciała użytkownika i przesyłali je do wyświetlacza w czasie rzeczywistym. Jeśli użytkownik wprowadził wiele ruchów w krótkim okresie czasu, ruchy byłyby przechowywane.

Gdy przewijasz kilka minut filmu strumieniowego lub programu telewizyjnego, te poprzednie klatki były przechowywane w okrągłym buforze, aby można było szybko uzyskać do nich dostęp. Jeśli przewiniesz więcej klatek niż jest przechowywanych w buforze, ponowne załadowanie klatek, których szukasz, zajmie więcej czasu.

Podsumowując, jeśli potrzebujesz szybkiego dostępu do danych strumieniowych, które zostały już zaobserwowane lub wykorzystane, bufor kołowy może być dobrym rozwiązaniem!

.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.