AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Ringpuffer Bibliothek veröffentlicht

Ein Thema von TurboMagic · begonnen am 23. Aug 2020 · letzter Beitrag vom 23. Jan 2022
Antwort Antwort
Seite 4 von 4   « Erste     234   
Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
680 Beiträge
 
Delphi 10.3 Rio
 
#31

AW: Ringpuffer Bibliothek veröffentlicht

  Alt 4. Jan 2022, 11:26
Im Idealfall sollte ein thread-safer Ringbuffer lock-free sein und nicht einfach stumpf ne CS oder sowas nutzen.
Ich denke ab mehr als einem Thread, der Daten schreibt oder liest wird es sich nicht vermeiden lassen mit CS zu arbeiten. Zumindest bei jedem schreibenden Zugriff auf die Positionszeiger.
Aber selbst dann können sich Fehler ergeben wenn ein Positionszeiger von mehr als einem Thread zur gleichen Zeit gelesen wird, dann würden all diese Threads auf die gleichen Datenzelle lesend oder schreibend zugreifen.
Ich kann mir nicht vorstellen wie man das ohne CS lösen kann.
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.094 Beiträge
 
Delphi 12 Athens
 
#32

AW: Ringpuffer Bibliothek veröffentlicht

  Alt 4. Jan 2022, 11:36
Im Idealfall sollte ein thread-safer Ringbuffer lock-free sein und nicht einfach stumpf ne CS oder sowas nutzen.
Ich verstehe nur noch nicht ganz, wie man das umsetzen könnte?
Das könnte vielleicht mit viel Interlocked Pointer-Einsatz gehen, würde ich mal vermuten.
https://ferrous-systems.com/blog/lock-free-ring-buffer/

Aber das wäre dann sicher schon die nächste Ausbaustufe des RingBuffers.
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.942 Beiträge
 
Delphi 12 Athens
 
#33

AW: Ringpuffer Bibliothek veröffentlicht

  Alt 4. Jan 2022, 12:12
Wie gesagt: der Autor der Bibliothek ist offen für Code Beiträge
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.016 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#34

AW: Ringpuffer Bibliothek veröffentlicht

  Alt 4. Jan 2022, 13:20
AFAIK hat die OTL sowas schon
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.942 Beiträge
 
Delphi 12 Athens
 
#35

AW: Ringpuffer Bibliothek veröffentlicht

  Alt 7. Jan 2022, 17:05
Im Idealfall sollte ein thread-safer Ringbuffer lock-free sein und nicht einfach stumpf ne CS oder sowas nutzen.
Ich verstehe nur noch nicht ganz, wie man das umsetzen könnte?
Das könnte vielleicht mit viel Interlocked Pointer-Einsatz gehen, würde ich mal vermuten.
https://ferrous-systems.com/blog/lock-free-ring-buffer/

Aber das wäre dann sicher schon die nächste Ausbaustufe des RingBuffers.
Und, welchen Ansatz benutzt du nun?

Grüße
TurboMagic
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.094 Beiträge
 
Delphi 12 Athens
 
#36

AW: Ringpuffer Bibliothek veröffentlicht

  Alt 8. Jan 2022, 11:10
Und, welchen Ansatz benutzt du nun?
Wie schon gesagt, basierend auf TMemoryStream, mit Interlocked Pointern und Flags zur möglichst effizienten Kontrolle der aktuellen Start/End Pointer, und zur Minimierung von echten CriticalSections.
Ich brauche das im Moment um zufällig eingehende TBytes Sendungen mit variabler Länge, von regelmäßigen Bearbeitungen , welche diese TBytes Daten abholen und verarbeiten sicher zu entkoppeln.
Also es kann gerade etwas abgeholt werden, wenn zufällig neue Daten reinkommen, das muss abgesichert werden.
Das basiert allerdings auf linearen Speicher und ist auf Byte-Stream-Weise Ein- und Ausgabe optimiert,
also ist es mit dem universellen Ringbuffer in dem man Alles reinwerfen kann nicht ganz kompatibel.
( Oder zumindest wäre ein direkter Vergleich etwas unfair ).

Ich könnte auch einen FIFO-artigen, linearen Speicher dafür nehmen, müsste dann aber verhindern dass der unendlich anwächst, deshalb hatte ich RingBuffer eingesetzt.
In meinem Fall wäre das aber sicher auch mit einem längenbegrentzen FIFO möglich,
vom RingBuffer erhoffe ich mir allerdings unnötiges Umkopieren/Löschen von Bytes zu verhindern.
Ein Ringbuffer muss ja nicht entsorgt werden, sondern der StartPointer (Integer) läuft einfach bis zum EntPointer (Integer), und die alten Daten bleiben einfach unangetastet im Ring, das kostet fast gar nichts.

Trotzdem checke ich immer mal wieder wie sich Alternativen dazu verhalten und ob es gute Ideen dazu gibt.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#37

AW: Ringpuffer Bibliothek veröffentlicht

  Alt 8. Jan 2022, 11:44
und die alten Daten bleiben einfach unangetastet im Ring
Das geht auch nur solange gut, bis der generische Ringbuffer mit Managed Types verwendet wird. Dann muss beim Entfernen eventuell schon was mit den alten Daten passieren (z.B. Interfaces auf nil setzen). Das bedeutet manchmal eben auch Schreibzugriffe auf den Bufferspeicher zusätzlich zu den Pointern mit allem was es bei Multithreading dabei zu beachten gibt. Generics sind halt nicht trivial und verursachen oft einen ziemlichen Overhead, der bei simplen Typen zwar redundant ist, aber nicht immer so leicht wegoptimiert werden kann.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.094 Beiträge
 
Delphi 12 Athens
 
#38

AW: Ringpuffer Bibliothek veröffentlicht

  Alt 8. Jan 2022, 13:19
und die alten Daten bleiben einfach unangetastet im Ring
Das geht auch nur solange gut, bis der generische Ringbuffer mit Managed Types verwendet wird.
Genau, ich rede ja auch nur von meiner Anwendung, mit reinen TBytes Streams.
Dass der universelle RingBuffer so nicht optimiert werden kann ist klar.
Deshalb schreibe ich ja dass ein Vergleich mit Äpfeln und Birnen etwas unfair ist
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
472 Beiträge
 
#39

AW: Ringpuffer Bibliothek veröffentlicht

  Alt 22. Jan 2022, 20:18
Und, welchen Ansatz benutzt du nun?
Vielleicht liefert dir dieser Blog Artikel und die weiterführenden Links zusätzliche Inspiration: Three Locks To Rule Them All.

Bis bald...
Thomas
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.942 Beiträge
 
Delphi 12 Athens
 
#40

AW: Ringpuffer Bibliothek veröffentlicht

  Alt 23. Jan 2022, 09:48
Und, welchen Ansatz benutzt du nun?
Vielleicht liefert dir dieser Blog Artikel und die weiterführenden Links zusätzliche Inspiration: Three Locks To Rule Them All.

Bis bald...
Thomas
Danke für den Link. Du darfst so einenen Lock Mechanismus gerne inform einer Kindklasse beitragen. Ich freue mich über von anderen beigesteuerte Code Erweiterungen, gerne auch ersmal in einem eigenen branch auf GitHub.

Grüße
TurboMagic
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 4   « Erste     234   


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 02:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz