AGB  ·  Datenschutz  ·  Impressum  







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

Aktualisierung und SendMessage

Ein Thema von yogie · begonnen am 26. Okt 2013 · letzter Beitrag vom 28. Okt 2013
Antwort Antwort
Furtbichler
(Gast)

n/a Beiträge
 
#1

AW: Aktualisierung und SendMessage

  Alt 28. Okt 2013, 06:13
Wir hatten mal eine ähnliche Anwendung. Dort sind Daten von Messgeräten eingetroffen, sollten in die DB und parallel dazu angezeigt werden.

Wir haben es mit Threads und Messages (PostMessage) ausprobiert. Beides funktioniert gleich gut. In meinem Hinterkopf trällert aber immer noch, das man nicht mit Threads nicht um sich werfen sollte. Das kann ein Überbleibsel aus der der Steinzeit sein, aber ich finde Threads hierfür einfach oversized.

Ich würde zunächst das Observer-Pattern einführen, um Datenempfang und Visualisierung auch logisch zu entkoppeln und skalierbar zu machen.

Der Datenempfang implementiert einen Observer, an dem sich Formulare, die Daten anzeigen wollen, anmelden können.
Die Observerbenachrichtigungsschleife ist als Job eines Workerthreads implementiert, der wiederum eine Jobliste (=Queue) abarbeitet. So kann dieser Workerthread (besser : Pool) beliebige Jobs abarbeiten und das System kommt auch bei kurzzeitiger Überlastung nicht ins Schwitzen. Selbst wenn kurzzeitig sehr viele Benachrichtungen anstehen, blockiert der Observer nicht, da dann eben die Jobliste etwas voll wird...

Die Benachrichtigung an die einzelnen Subscriber (=Forms) kann nun als Postmessage verschickt werden. Das ist imho leichtgewichtiger als noch einen Thread zu starten. Allerdings sind dabei die Einschränkungen von Sebastian zu beachten. Man kann hier die Daten z.B. in eine Datenklasse mit Referenzzählung wrappen (Stichwort: Interface) oder Strings verwenden (z.B. bei einem Logger), der die Referenzzählung auch eingebaut hat.

Das generelle Problem ist hier, das bei Überlastung die Messagequeue der einzelnen Subscriber zu voll werden könnte. Das muss man im Einzelnen bewerten, ob das eine Rolle spielt und wie man damit umgehen kann bzw. soll.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.054 Beiträge
 
Delphi 12 Athens
 
#2

AW: Aktualisierung und SendMessage

  Alt 28. Okt 2013, 07:59
In meinem Hinterkopf trällert aber immer noch, das man nicht mit Threads nicht um sich werfen sollte. Das kann ein Überbleibsel aus der der Steinzeit sein, aber ich finde Threads hierfür einfach oversized.
Ob der Overhead der Messagebehandlung da wirklich so viel geringer ist?

Messages sind jedenfalls gerade bei größerem Datenaufkommen ungeeignet, da alles über einzelne Nachrichtenwarteschlangen läuft. Wenn diese dann zu stark belastet werden, merkt man das an einer etwas träge auf Eingaben reagierenden Anwendung, da die dazu gehörenden Nachrichten entsprechend langsamer behandelt werden können. Zudem kann es sein, dass eine Nachricht länger braucht bis sie abgearbeitet wird und so die Aktualisierung aller Fenster laggt.

Davon ganz abgesehen kann man mit Messages erst einmal nur zwei Zahlenwerte schicken. Alles andere läuft dann als Pointer- und Speicherspielerei. Ein Thread hingegen kann typsicher und sauber direkt mit den Daten arbeiten, diese aufbereiten und gezielt an die passenden Empfänger weitergeben.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
yogie

Registriert seit: 11. Sep 2003
Ort: bei Goslar
213 Beiträge
 
Delphi 6 Professional
 
#3

AW: Aktualisierung und SendMessage

  Alt 28. Okt 2013, 18:37
vielen Dank!
Das ist genau die Art Beiträgen die mich weiterbringen.
(keine Ironie!!) Man ist als Einzelkämpfer immer dankbar,
wenn mal Anregungen mit einem anderen Blickwinkel kommen.
Sonst kopiert man nur immer wieder die Vorgehensweise,
die man schon vor 5 Jahren entwickelt hat.

@Furtbichler : Diese Ausführungen sind (zumindest für mich)
schon ein ziemlich großes Geschütz, trotden danke für die
ausfühliche Antwort. Ich werde das mal durchgehen und
schauen, was davon in meinem Fall verwertbar und macbar ist.

Für alle die es interessiert : Es werden Ströme und Spannungen
unter bestimmten Bedingungen gemessen (Elektrochemie, Potentiostaten)
Das Ganze findet eventuell auch noch auf mehreren Kanälen statt
und soll per serieller Schnittstelle (ev. Netzwertk) an einen
PC gekopplet werden.
Kompatibilität ist ein Euphemismus für n i c h t einhunderprozentige Austauschbarkeit
http://b-und-l-service.de/
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#4

AW: Aktualisierung und SendMessage

  Alt 28. Okt 2013, 18:52
Ob der Overhead der Messagebehandlung da wirklich so viel geringer ist?
...Messages sind jedenfalls gerade bei größerem Datenaufkommen ungeeignet
Kann ich nicht bestätigen. Bei einer Implementierung eines Loggers wurden auch mehrere Tausend Messages pro Sekunde nicht langsamer abgearbeitet als per Thread. Der Bottleneck war hier eindeutig die Darstellung (wie immer).

Geändert von Furtbichler (28. Okt 2013 um 18:55 Uhr)
  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 11:51 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