Datenstrukturen: Ihr schneller Einstieg in Circular Buffers

2. Mai, 2019 – 4 min read

Foto von James Thomas auf Unsplash

Haben Sie schon einmal Ihren Computer geöffnet und mit der Eingabe Ihres Passworts begonnen, nur um dann festzustellen, dass Ihre Eingaben stark verzögert werden? Diese Verzögerung tritt auf, wenn der Computerprozessor aufwacht und feststellt, dass er Daten vom Miniprozessor in der Tastatur abrufen muss. Aber wie werden diese Informationen gespeichert, wenn nur ein winziges bisschen Platz im Speicher der Tastatur vorhanden ist?

Hier kommt der Ringspeicher ins Spiel.

Der Ringspeicher ist eine bestimmte Art von Warteschlange. Wenn Sie mit einer Warteschlange nicht vertraut sind, kennen Sie sie vielleicht als Schlange. (Diese Warteschlange ist eine FIFO-Struktur (first in, first out). Das bedeutet, dass die erste Person, die eine Schlange betritt, auch die erste Person ist, die sie verlässt. Was ist also der Unterschied zu einer zirkulären Warteschlange?

Ein zirkulärer Puffer speichert Daten in einem Array mit fester Größe. Sobald die Größe festgelegt ist und der Puffer voll ist, wird das älteste Element im Puffer verdrängt, wenn weitere Daten hinzugefügt werden. Durch die Speicherung von zwei Zeigern auf den vorderen und den hinteren Teil der Struktur besteht keine Notwendigkeit, das Array dynamisch zu manipulieren.

Wenn der Puffer jedoch voll ist und Sie etwas Neues hinzufügen müssen, setzen Sie einfach das Listenelement, auf das der hintere Zeiger zeigt, auf das neue Element und erhöhen den hinteren Zeiger um eins. Der vordere Zeiger zeigt nun auf das zuletzt hinzugefügte Element.

Diese Technik der Speicherzuweisung hat Vorteile, wenn man mit vielen Daten in Echtzeit arbeitet. Wenn der Struktur weitere Daten hinzugefügt werden, werden die alten Daten entfernt, so dass keine Daten mehr verschoben werden müssen. Wie bereits erwähnt, verschieben die Zeiger lediglich die Positionen.

Nun zurück zu Ihrer Tastatur und der Passworteingabe. Alle Ihre Tastenanschläge werden in einem kreisförmigen Puffer gespeichert. Wenn Sie also schnell genug tippen, würden Sie möglicherweise einen Teil der von den Tastenanschlägen erhaltenen Eingaben verlieren.

Ein schlecht gezeichnetes Restaurant mit kreisförmigem Puffer.

Um sich den kreisförmigen Puffer besser vorstellen zu können, lassen Sie uns ein automatisches Restaurant bauen. Dieses Restaurant hat ein einziges Abholfenster (die Rückseite des Puffers), wo jeweils ein Kunde sein Essen (die Daten) abholen kann. Hinter dem Fenster befindet sich ein rotierender, kreisförmiger Tisch, der 8 Mahlzeiten fasst (der Puffer). Außerdem gibt es eine Lampe, die auf die Vorderseite des Tisches (oder die Vorderseite des Puffers) zeigt. Jedes Mal, wenn eine Mahlzeit aus dem Fenster genommen wird, dreht sich der Tisch um einen Punkt im Uhrzeigersinn.

Wenn der Koch mit der Zubereitung einer Mahlzeit fertig ist, stellt er sie einen Punkt vor den beleuchteten Platz. Das Licht leuchtet dann auf das neu platzierte Gericht. Wenn der Puffer voll ist und eine Mahlzeit vom Herd kommt, wird die Mahlzeit am Fenster in den Papierkorb geworfen. Der Tisch dreht sich, und das neue Gericht wird auf den leeren Platz gestellt.

Use Cases

Ein Ausbilder erzählte mir einmal von einer Augmented-Reality-Firma, die einen kreisförmigen Puffer verwendete, um die vom Benutzer eingegebenen Bewegungen zu speichern. Sie zeichneten die Hand- und Körperbewegungen des Benutzers auf und übertrugen sie in Echtzeit auf ein Display. Wenn ein Benutzer in kurzer Zeit viele Bewegungen eingibt, werden diese gespeichert.

Wenn man ein paar Minuten eines Streaming-Films oder einer Fernsehsendung zurückspult, werden die vorherigen Bilder in einem Ringspeicher gespeichert, so dass sie schnell abgerufen werden können. Wenn Sie mehr Bilder zurückspulen, als im Puffer gespeichert sind, dauert es länger, bis die gesuchten Bilder wieder geladen sind.

Zusammenfassend lässt sich sagen, dass ein Ringspeicher eine gute Lösung sein kann, wenn Sie schnell auf Streaming-Daten zugreifen müssen, die bereits beobachtet oder verwendet wurden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.