AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke TThreadedQueue vs ThreadedRingBuffer
Thema durchsuchen
Ansicht
Themen-Optionen

TThreadedQueue vs ThreadedRingBuffer

Ein Thema von QuickAndDirty · begonnen am 3. Feb 2025 · letzter Beitrag vom 4. Feb 2025
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.376 Beiträge
 
Delphi 12 Athens
 
#1

AW: TThreadedQueue vs ThreadedRingBuffer

  Alt 3. Feb 2025, 17:02
Queue = FIFO (first in, first out)
Stack = LIFO (last in, first out)

Also ja Queue gleich entsprechend RingBuffer ... praktisch das gleiche Verhalten, also es unterscheidet sich nur die interne Speicherverwaltung.

Und da die TThreaded-Komponenten ja selbst das Threadsichere handhaben, kann man da meistens direkt auf Add/Remove/Push/Pop/... zugreifen, weil sie intern sich selbst absichern (wenn diese Methoden direkt oben public erreichbar sind)


Als Ringbuffer oder verkettete Liste hat es halt den Vorteil, dass beim Reinschieben oder Rausholen nicht der gesamte Listeninhalt verschoben werden muß.
(beim Stack geht ist Beides immer am Listenende und somit verschieben sich die vorherrigen Einträge nicht)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 3. Feb 2025 um 17:41 Uhr)
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.174 Beiträge
 
Delphi 12 Athens
 
#2

AW: TThreadedQueue vs ThreadedRingBuffer

  Alt 3. Feb 2025, 17:51
Als Ringbuffer oder verkettete Liste hat es halt den Vorteil, dass beim Reinschieben oder Rausholen nicht der gesamte Listeninhalt verschoben werden muß.
Genau, der RingBuffer, so wie ich ihn verstehe, muss nur einmal seine Speicher-Kapazität allozieren und zeigt dann quasi nur mit Start- und Ende-Pointern auf den entsprechenden Abschnitt in seinem gesamten Speicherbereich, was den Zugriff theoretisch viel effizienter machen sollte, weil nie etwas hin- und herkopiert wird.
Dafür kann es aber auch einen Überlauf geben.
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
2.003 Beiträge
 
Delphi 12 Athens
 
#3

AW: TThreadedQueue vs ThreadedRingBuffer

  Alt 4. Feb 2025, 09:10
Genau, der RingBuffer, so wie ich ihn verstehe, muss nur einmal seine Speicher-Kapazität allozieren und zeigt dann quasi nur mit Start- und Ende-Pointern auf den entsprechenden Abschnitt in seinem gesamten Speicherbereich, was den Zugriff theoretisch viel effizienter machen sollte, weil nie etwas hin- und herkopiert wird.
Dafür kann es aber auch einen Überlauf geben.
TThreadedQueue macht das genau so.
Intern speichert es einen ReadPointer "FQueueOffset mod length(fQueue)" in form eines index auf ein Array und einen WritePointer "(FQueueOffset + fQueSize) mod length(fQueue)" ebenfalls als index auf das Array fQueue.

Und da die TThreaded-Komponenten ja selbst das Threadsichere handhaben, kann man da meistens direkt auf Add/Remove/Push/Pop/... zugreifen, weil sie intern sich selbst absichern (wenn diese Methoden direkt oben public erreichbar sind)
Ich hatte halt nur irgendwie gehofft dass ein Ringspecher ohne Vollsperrung für threadsicherheit auskommen würde.
Vermutlich müsste es dafür ein Ringspeicher auf Basis einer Verkettetenliste sein?
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz