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?
Thema durchsuchen
Ansicht
Themen-Optionen

Multithreading-Projekt: PPL oder OmniThreadLibrary?

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

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

Multithreading-Projekt: PPL oder OmniThreadLibrary?

  Alt 2. Jul 2019, 23: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 ( 2. Jul 2019 um 23:46 Uhr)
  Mit Zitat antworten Zitat
 

 

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 21:49 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