Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Thread-Koordination ohne Messages (https://www.delphipraxis.net/183647-thread-koordination-ohne-messages.html)

p80286 25. Jan 2015 21:06

Thread-Koordination ohne Messages
 
Hallo zusammen,
ich habe z.Zt. eine Anwendung, die eine größere Menge Dateien/Verzeichnisse durchsuchen muß (findfirst/findnext). Da das etwas länger dauert, will ich das in mehrere Threads aufteilen. Allerdings soll das vollkommen unabhängig von der Oberfläche funktionieren.
Nur wie bekomme ich die verschedenen Treads dann ohne Messages koordiniert?

Gruß
K-H

Sir Rufo 25. Jan 2015 22:06

AW: Thread-Koordination ohne Messages
 
Ohne Messages heißt jetzt komplett ohne den Austausch von Nachrichten oder ohne die Windows Messages zu benutzen?

Dejan Vu 25. Jan 2015 22:20

AW: Thread-Koordination ohne Messages
 
Das schreit doch geradezu nach einem Workerthreadpool. Einfach per FindFirst/FindNext durch die Verzeichnisstruktur rennen und für jede Datei einen Job kreieren, der in die Jobliste des Pools gepackt wird.

Oder mit der TParallel-Library.

p80286 25. Jan 2015 23:04

AW: Thread-Koordination ohne Messages
 
@Dejan Vu
Da ich noch mit älteren Delphi-Versionen arbeite(n muß) entfällt das.

@Sir Rufo
Mir sind nur die Windowsmessages bekannt. Gibt's da noch was anderes?

Gruß
K-H

himitsu 25. Jan 2015 23:06

AW: Thread-Koordination ohne Messages
 
Zitat:

ich habe z.Zt. eine Anwendung, die eine größere Menge Dateien/Verzeichnisse durchsuchen muß (findfirst/findnext).
Nur Dateien suchen, oder wird damit auch was gemacht und wenn ja, was?

Ansonsten kann das in Threads maximal genauso schnell gehen (bei einer SSD) oder wenn das Dateisystem bereits zum Großteil im Cache geladen ist.
Bei normalen Festplatten wird das durch sowas sogar noch langsamer, da man durch paralelle Zugriffe sich gegenseitig die Festplatte ausbremst. :stupid: (je mehr Threads, um so schlimmer wird es ... abhängig von der Festplatte sogar ganz extrem)

Ausnahme bei mehreren Zugriffen auf je eine getrennte Festplatte ... abhängig vom Controller.

Sir Rufo 25. Jan 2015 23:45

AW: Thread-Koordination ohne Messages
 
Zitat:

Zitat von p80286 (Beitrag 1287723)
@Sir Rufo
Mir sind nur die Windowsmessages bekannt. Gibt's da noch was anderes?

Zum Stichwort Messages fällt mir der Austausch von Informationen ein, eventuell sogar durch eine Queue (nennt sich dann eine Message Queue), die dann periodisch abgearbeitet wird (per Polling). In dieser Art und Weise funktioniert auch das Windows Messaging. Das kann man aber auch selber bauen und zwar genau so oder auch in einer abgewandelten Form. Letztendlich werden irgendwann nur noch Methoden mit dem Nachrichteninhalt aufgerufen. Wieviele ist egal.

Luckie 26. Jan 2015 01:25

AW: Thread-Koordination ohne Messages
 
Events wäre noch eine Möglichkeit.

Dejan Vu 26. Jan 2015 08:09

AW: Thread-Koordination ohne Messages
 
Zitat:

Zitat von p80286 (Beitrag 1287723)
@Dejan Vu
Da ich noch mit älteren Delphi-Versionen arbeite(n muß) entfällt das.

Also dieser Workerthreadpool sollte mit allen Delphi-Versionen zurecht kommen. Da ist nichts besonderes drin.

p80286 26. Jan 2015 11:10

AW: Thread-Koordination ohne Messages
 
@Himitsu
Da es sich bei der "Festplatte" um einen Fileserver handelt, hoffe ich auf Besserung!
ach ja "zunächst nur Dateien suchen", dann die Sicherheitsattribute abfragen. Es gibt da ein paar Unterscheidungen und Niggelichkeiten, darum bin ich gezwungen, den vollständigen Bestand einzulesen. Beschränkung im Vorfeld ist leider nicht der Standardfall.

@Sir Rufo
Queue ist mir schon klar, nur wie organisiere ich so etwas? Eigentlich brauche ich einen unabhängiges Programm/Thread, das die queue organisiert?

@Luckie
Events? werden doch nur von der Hardware verschickt? und da bin ich doch auch auf Komponenten angewiesen?

@Dejan Vu
Wo find ich Infos über den (Delphi-)WorkerThreadpool? Ich hab das erst einmal als XEx-Erweiterung abgetan?

und vielen dank an Euch!
K-H

DeddyH 26. Jan 2015 11:15

AW: Thread-Koordination ohne Messages
 
http://www.delphipraxis.net/93835-wo...ntergrund.html

[edit] Nachtrag: http://delphi.about.com/od/kbthread/...asynccalls.htm [/edit]

himitsu 26. Jan 2015 11:22

AW: Thread-Koordination ohne Messages
 
Also grade bei einem Festplatte wird man doch vermutlich "richtige" Festplatten einbauen.

Das Problem ist die Neuausrichung der Leseköpfe und je öfter man das mach, um so langsamer wird der Zugriff.
Vorallem bei paralellen Zugriffen werden die unnötig viel hin und her gejagt. Bei größerem Verzeichnissen schafft der Leseprozess es womöglich nicht das komplette Verzichnis zu lesen, da ihm ständig von anderen Zugriffen dazwischengefunkt und der Lesekopf wo anders hingeschickt wird.


Rate mal, warum der Explorer so lange für die Dateisuche braucht (wenn Verzeichnis nicht indiziert ist) ... da ist auch ein trottel auf die geile Idee gekommen das Multithread zu machen und dann noch als ausgebremster Hintergrungprozess. :wall: (OK, liegt zusätzlich auch noch an dem arschlahmen ListView)
z.B. in C:\ oder C:\Windows nach "*.*" suchen

p80286 26. Jan 2015 11:33

AW: Thread-Koordination ohne Messages
 
@DeddyH
Uiui:oops: Da hab ich wohl was verpasst! vielen Dank!

@Himitsu
Na klar, irgendwo ist da irgendwie eine Festplatte oder 2 oder 3 oder .. enthalten. Nur die Daten tröpfeln so langsam herein, da versuche ich halt den Anforderungsdruck zu erhöhen. Denn zwischen meinem PC und der Serverfestplatte(n) gibt es mehr als einen Server/Controler der/die den Verkehr regelt. Das Ding kann ja schließlich überall stehen, wahrscheinlich in der Umgebung von Dublin bei der IBM.

Gruß
K-H

Dejan Vu 26. Jan 2015 14:34

AW: Thread-Koordination ohne Messages
 
Zitat:

Zitat von p80286 (Beitrag 1287748)
Wo find ich Infos über den (Delphi-)WorkerThreadpool?

Ich hab doch extra den Link mit angegeben. DP! Macht das mal deutlicher, das da ein Link ist!


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:47 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 by Thomas Breitkreuz