Daten ermitteln mittels Threads [ERLEDIGT]

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Daten ermitteln mittels Threads [ERLEDIGT]

Beitrag von Manfred »

Hallo,

ihr habt doch sicherlich schon einiges mit Threads programmiert!?

Ich bin gerade dabei mir ein paar Gedanken zur Ermittlungen von Statistikdaten zu machen. In wie weit, bringt es Vorteile/Nachteile/überhaupt nichts, wenn ich eine DB habe, die mit anderen DB verknüpft ist, aus denen ich Statistikdaten ermitteln möchte, wenn ich diese Daten (Do While ! EOF(), oder Do while id = idsoundso) nacheinander ermittel, oder in jeweils einem eigenen Thread quasi parallel laufen lasse?

Kurzes Beispiel

HauptDB Satz suchen-->gefunden

1) NebenDB alle Daten zu diesem Satz ermitteln
2) NebenDB
3) NebenDB

usw.

Als nächstes wäre noch die nebensächliche Frage: Wie komplex, bzw. kompliziert würde sowas mit Threads, wenn es sich denn lohnen würde? Es geht wenn immer nur 1 Satz->Daten ermitteln. Es dürften also keine Probleme auftauchen, dass eine DB auf Daten aus einer anderen warten müßte. Das Gesamtergebnis würde dann am Ende zusammengerechnet werden. das müßte ja dann auch über einen Merker zu regeln sein, der weiß, wann alle Threads durch sind.

Zunächst würde mich der Grundgedanke interessieren, später, ab welchen Mengen es sich lohnen würde mit Threads zu arbeiten.
Zuletzt geändert von Manfred am Mi, 14. Apr 2010 20:21, insgesamt 1-mal geändert.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo Manfred,

es macht meist Sinn eine längere Operation in einen eigenen Thread auszulagern, um das Hauptprogramm von Anzeigeproblemen zu befreien.

Wenn Auswertungen völlig unabhängig voneinander sind kann man diese in eigenen Thread berechnen lassen. Wenn aber eine Berechnung auf einer anderen aufbaut, rate ich dringend davon ab. Du weißt nie welcher Thread zuerst und welcher später beginnt und endet.

Allerdings hast du nur eine Festplatte und wahrscheinlich werden die 3 gleichzeitigen Threads länger brauchen (konkurierender Zugriff gibt viele Kopfbewegungen) als 3 nacheinander laufende Auswertungen, die auf die Datei eventuell sogar exclusive zugreifen können.
Gruß
Hubert
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Beitrag von Jan »

Hallo Manfred,

ich kann mir vorstellen, daß es in bestimmten Fällen sinnvoll sein kann, irgendwelche Auswertungen im Hintergrund zu fahren.

Wir erstellen z. B. Statistikdaten punktgenau zum Abfragezeitpunkt, und das dauert im Netz mal eben 20 Minuten bei einer bestimmten Auswertung. Und in dieser Zeit ist der Rechner zu nichts anderem zu gebrauchen (ist in Access geschrieben, und das kann nun einmal kein MT).

Da würde ich mir öfters mal wünschen, daß das im Hintergrund laufen könnte. Dann kann man wenigstens parallel noch Daten erfassen etc. Jetzt ist der ganze Rechner blockiert, da sonst keine Software darauf läuft.

Ich denke aber auch, daß man sich tot-Threaden kann. Man muß nicht immer alles machen nur weil es möglich ist. Wie heißt das so schön: Der Computer ist dazu da Probleme zu lösen, die man ohne Computer nicht hätte. Und wir hatten ja kürzlich erst die kurze Diskussion wegen Normalisierung. Auch da kann mann natürlich alle Regeln einhalten. Und dann eine zusätzliche Person einstellen die da noch den Überblick behält und die ganzen Dateien korrekt offen halten kann.

Sprich: Wenn Du eine Auswertung fahren möchtest die Dir den ganzen Rechner blockiert, dann lagere das aus. Wenn Du Deine Auswertung in sich threaden willst macht das in meinen Augen eher wenig Sinn. Denn die Hauptstufe lässt sich sicherlich relativ flott erstellen auf den heute aktuellen Rechnern. Da sehe ich keinen Geschwindigkeitsvorteil drin. Da hilft eine Codeoptimierung sicher mehr. Und wenn denn schon die ganze Auswertung im Hintergrund läuft, dann kommt es auf die marginale Mehrzeit für die Hauptauswertung sicher auch nicht mehr drauf an.

Man darf ja nicht vergessen, daß der Rechner nun einmal immer nur 100 % leisten kann. Mehr ist nicht drin. Und wenn die 100 % bereits ausgeschöpft sind, dann muß man irgendetwas anderes verlangsamen, um noch etwas parallel ausführen zu können. Was bei Datenbankanwendungen dann natürlich nicht die Prozessor- oder Speicherleistung, sondern die Festplattenleistung betrifft. So schnell kann die normalerweise garnicht lesen wie der Prozessor die Daten verarbeitet. Man hat also zumeist nicht wirklich etwas gewonnen, durch den Verwaltungsaufwand vielleicht sogar eher etwas verloren. Anders, wenn im Vordergrund eher Eingabesachen laufen. Die gehen dann eher auf den Prozessor, und wenn dann ein Auswertungsthread im Hintergrund läuft dann ist das sicher produktiv und lohnenswert, da einen neuen Thread aufzumachen.

Jan


Ups, da war Hubert schneller. Man sollte sich halt von Kundengesprächen nicht im Schreiben abhalten lassen :D
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Beitrag von Tom »

Hu, Ihr drei.

Man kann es auch auf die Spitze treiben und jeden abhängigen Thread auf einem eigenen Prozessor starten - Multiprozessorsystem vorausgesetzt. :lol: (Ernstgemeinte Anmerkung: Dann hätte man möglicherweise sogar einen Geschwindigkeitsgewinn.)

Wie die Vorredner schruben: Ein Thread splittet die Applikation, ermöglicht also - mehr oder weniger - das Arbeiten im Hintergrund oder die Gestaltung eines MDI-Interfaces. Es würde im o.g. Fall genügen, die Auswertung insgesamt in einem versteckten Thread zu starten, wenn man es dem Anwender gestatten will, währenddessen weiterzuarbeiten. Ansonsten macht das unter normalen Bedingungen nicht so schrecklich viel Sinn. Ein neuer Thread kitzelt nicht mehr Leistung aus dem Rechner, eher im Gegentum.
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Joujoujou,

alles klar. Habe ich verstanden. War nur mal so eine Frage, damit keiner denkt, die würden mir ausgehen.....
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo Manfred,

am einfachsten erkennst du die Notwendigkeit einer Auslagerung, wenn dein Programm während einer Arbeit nicht mehr auf Mausklicks oder Tastatur reagiert, wenn es überlagert ist, bleiben leere Flächen (keine Zeit für Repaint). Wenn das nur wenige Sekunden dauert geht es nocht, aber je nach Abfrage wäre das Programm dann komplett blockiert, das ist unschön - natürlich mußt du dann aber alles disablen was wirklich blockiert werden soll.
Gruß
Hubert
Antworten