Ich gebe dir eine Analogie.
Stellen Sie sich eine Schlange am Straßenverkäufer vor, wo sich Leute am Ende der Linie treffen und von vorne bedient werden. Während jede Person bedient wird, schlurfen die verbleibenden Personen in der Warteschlange vorwärts (üblicherweise murmelnd, wie lange sie dauert), und am Ende kommen neue Leute hinzu. In diesem Beispiel müssen Benutzer sich vorwärts bewegen, um anderen zu ermöglichen, sich der Linie anzuschließen, andernfalls würde sich das Ende der Warteschlange immer weiter von dem Verkäufer entfernen. In diesem Beispiel bleibt der Server also an der Spitze der Warteschlange und kümmert sich um diejenigen, die an der Front oder an niemandem stehen.
Stellen Sie sich nun vor, die Leute hätten sich nicht bewegt, aber nachdem sie den Kopf der Warteschlange bedient hatten, bewegte sich der Verkäufer selbst weiter entlang der Warteschlange, um sich dorthin zu bewegen, wo der Kopf der Warteschlange ist. Irgendwann nach dem Servieren von 100 Leuten ist der Server auf halber Höhe der Straße und nach 500 ist der Server jetzt in der nächsten Straße usw. ... wo hört es auf?
Aus praktischen Gründen bildet der Verkäufer einen großen Circuit-Bereich ab, in dem sich die Leute immer am Ende der Schlange anmelden können und er immer zur nächsten Person geht, aber die Schlange bleibt an einem Ort. Er geht nur durch die Schlange, die den Leuten dient. Sicher, er kann nur den Leuten in der Schlange dienen, aber vorausgesetzt, er macht es groß genug, dann kann er mit der Nachfrage Schritt halten, und er muss nicht von seinem zugewiesenen Verkaufsbereich weggehen.
Nehmen wir diese Analogie zurück zu Computern ... im ersten Beispiel gibt es einen Warteschlangenmanager und wenn Artikel gewartet werden, mischt es Elemente entlang des Puffers. Im zweiten Beispiel wird das Programm ausgeführt, bis kein weiterer Speicher zum Array hinzugefügt werden kann = es hat eine feste Größe (entweder definiert oder begrenzt durch Leerzeichen).In dem Beispiel bewegt sich der Server zum Kopf der Warteschlange wie der zweite, aber das Array ist fest und nur so viele Elemente können der Warteschlange beitreten, aber sie erhalten weiterhin einen FIFO-Service.
tl; dr: Effizientes Management von Ressourcen.
Ich denke, auch mit unbegrenzten Slots ist es immer noch nützlich, diejenigen, die Sie in einer kreisförmigen Art und Weise zu verwenden. –
In einem unbegrenzten Szenario würde ich den Speicher auf einem 'get()' freigeben und neuen Speicher auf einem 'add()' zuweisen. Also ich benutze die Slots aber nicht ich bin eine feste Reihenfolge. – Simulant
Ich denke Simulant bezieht sich auf eine Warteschlange, die von einer dynamischen Datenstruktur wie einer LinkedList unterstützt wird. In diesen Fällen macht es keinen Sinn, "Slots wiederzuverwenden", weil es keine Slots gibt, nur "Halter-Links", die billig erstellt und verworfen werden können. Tatsächlich kann es im Allgemeinen bei der Versuchung, billig konstruierte Objekte übermäßig wiederzuverwenden, zu Leistungsproblemen führen, indem Objekten erlaubt wird, in eine Klassifikation von Heap-Speicherplatz zu migrieren, wo sie nicht hingehören. –