AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Multithreading-Projekt: PPL oder OmniThreadLibrary?

Multithreading-Projekt: PPL oder OmniThreadLibrary?

Ein Thema von romber · begonnen am 3. Jul 2019 · letzter Beitrag vom 3. Jul 2019
Antwort Antwort
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#1

Multithreading-Projekt: PPL oder OmniThreadLibrary?

  Alt 3. Jul 2019, 00:39
Ich stehe vor einer Aufgabe, die ich ohne den gut durchdachten Multi-Threading werde wahrscheinlich nicht lösen können.

Folgender Aufgabe: Über zwei WebSocket-Verbindungen bekomme ich extrem viele Datenpakete (bis zu 500 pro Sekunde, bis zu 4 KB groß). Bei den Datenpaketen handelt es sich um die Sensorendaten, die möglichst schnell verarbeitet und visualisiert werden müssen. Mit „möglichst schnell“ ist gemeint, dass jede vermeidbare Verzögerung vermieden und dadurch die max. mögliche Performance erreicht werden soll. Andererseits soll das Ganze stabil bleiben und das System nicht extrem überlasten.

Jedes empfangene Datenpaket muss folgende Schritte durchlaufen:

1. Entschlüsseln

2. Die entschlüsselten XML- oder JSON-Daten in einen Objekt (oder Record) umwandeln.

3. Eine n Zahl der vordefinierten Filter durchlaufen, wodurch das Objekt durch zusätzliche Daten ergänzt wird. Hier finden nun auch Zugriffe (u.a. schreibende) auf die Variablen der Filter-Objekte statt, die potenziell aus mehreren parallel laufenden Threads erfolgen können. Diese Zugriffe müssen mit möglichst geringen Performanceeinbüßen geschützt werden.

4. Hinzufügen des neuen Objekts einem thread-sicheren Container, der als Custom Data Source für die DevExpress Quantum Grid dient. Was das am besten für ein Container sein soll, ist auch eine Frage.

5. Visualisieren des Objektes in einem Grid.

6. Darstellung der Objektdaten in einem Chart.

7. Eventuell Ausgabe eines akustischen Signals.

Die Datenpakete seriell zu verarbeiten kommt bei der Menge der Daten nicht infrage. Jedes Datenpaket unkontrolliert einem neuen Thread zuzuweisen und hoffen, dass alles glatt läuft, auch. Es muss also ein cleverer Thread-Manager her, der für den schnellen und stabilen Ablauf bei möglichst vielen parallel laufenden Tasks sorgt. Ich habe an Parallel Programming Library oder OmniThreadLibrary gedacht.

Ich lese gerade viel über OmniThreadLibrary und je mehr ich lese, desto stärker neige ich dazu, das Ganze mit der Library zu realisieren. Es scheint einfach so, dass die Bibliothek für jede erdenkliche Situation eine passende fertige Lösung hat und dabei auf Performance ausgelegt ist.

Wie würdet Ihr das Ganze realisieren? Für möglichst detaillierte Gedankenäußerungen und kleine Code-Bespiele für das bessere Verständnis bedanke ich mich im Voraus!

Geändert von romber ( 3. Jul 2019 um 00:46 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.275 Beiträge
 
Delphi 12 Athens
 
#2

AW: Multithreading-Projekt: PPL oder OmniThreadLibrary?

  Alt 3. Jul 2019, 05:55
Moin...

Gedanken dazu:
Zitat:
bis zu 500 pro Sekunde, bis zu 4 KB groß
Für die Visualisierung reichen imho ca. 10 Datensätze pro Sekunde. Kein Visuelles Control kommmt (bis zu 500 pro Sekunde, bis zu 4 KB groß) damit mit. Erst Recht nicht DevExpress. Dein Problem wird aber sein (ohne die Visualisierung), die gelesen Datensätze zu verarbeiten und den Speicher wieder freizumachen. Datenbank ist langsamer. (Spermanente Speicherung?) Der Flaschenhals wird die visuelle Ausgabe sein. (Grid, Chart).

PS: Welches Meßgerät liefert die Meßdaten in 2ms Rhytmus? Welcher Meßzeitraum wird betrachtet? 10s oder 24h?
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#3

AW: Multithreading-Projekt: PPL oder OmniThreadLibrary?

  Alt 3. Jul 2019, 08:22
3. Eine n Zahl der vordefinierten Filter durchlaufen, wodurch das Objekt durch zusätzliche Daten ergänzt wird. Hier finden nun auch Zugriffe (u.a. schreibende) auf die Variablen der Filter-Objekte statt, die potenziell aus mehreren parallel laufenden Threads erfolgen können. Diese Zugriffe müssen mit möglichst geringen Performanceeinbüßen geschützt werden.
Bei Multi-Threading ist aber die Reihenfolge in der die Daten verarbeitet werden nicht mehr absehbar, somit würden die gleichen Daten bei jedem Durchgang andere Ergebnisse produzieren.

Ist das so gewollt bzw. hast du daran gedacht?
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#4

AW: Multithreading-Projekt: PPL oder OmniThreadLibrary?

  Alt 3. Jul 2019, 11:19

Für die Visualisierung reichen imho ca. 10 Datensätze pro Sekunde. Kein Visuelles Control kommmt (bis zu 500 pro Sekunde, bis zu 4 KB groß) damit mit.
Im Schnitt sind es etwa 75 pro Sekunde. Tatsächlich spielen nur etwa 10-20% der Datensätze bei die Visualisierung direkt eine Rolle, der Rest sind Metadaten, die jedoch auchg nicht unterschätzt werden dürfen. Genau diese Metadaten laufen durch die im Schnitt 2 erwähnten Filter und sorgen unter Umständen für die Korrekturen bei der vusuellen Darstellung.[/QUOTE]


PS: Welches Meßgerät liefert die Meßdaten in 2ms Rhytmus? Welcher Meßzeitraum wird betrachtet? 10s oder 24h?
Die Sensoren sind ein Teil eines spektrometer-ähnlichen Gerätes in der Chemie. Die zu überwachende Reaktionen können länger als 24h andauern.

Bei Multi-Threading ist aber die Reihenfolge in der die Daten verarbeitet werden nicht mehr absehbar, somit würden die gleichen Daten bei jedem Durchgang andere Ergebnisse produzieren.
Bei der Art der Änderungen, die an den Filter-Variablen vorgenommen werden, spielt die Rehenfolge der Verarbeitung keine Rolle.
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.123 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Multithreading-Projekt: PPL oder OmniThreadLibrary?

  Alt 3. Jul 2019, 11:30
Ich arbeite an einem ähnlichen Projekt...

Ich nehme weder die PPL noch etwas anderes "von der Stange". Alle Threads erzeuge ich selber mit eigener Logik für die Verwaltung.

Ein gutes Queue-Konzept ist hier der Schlüssel zum Erfolg.

Mavarik
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#6

AW: Multithreading-Projekt: PPL oder OmniThreadLibrary?

  Alt 3. Jul 2019, 12:18
Ein gutes Queue-Konzept ist hier der Schlüssel zum Erfolg.
Würden Sie Ihr Queue-Konzept etwas genauer erläutern?
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.123 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Multithreading-Projekt: PPL oder OmniThreadLibrary?

  Alt 3. Jul 2019, 14:08
Würden Sie Ihr Queue-Konzept etwas genauer erläutern?
Klar... Was genau möchtest Du wissen?

Mavarik
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 10:32 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