Delphi-PRAXiS
Seite 2 von 5     12 34     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Kein wirklicher Geschwindigkeitsvorteil durch Threads? (https://www.delphipraxis.net/174790-kein-wirklicher-geschwindigkeitsvorteil-durch-threads.html)

Der schöne Günther 9. Mai 2013 22:09

AW: Kein wirklicher Geschwindigkeitsvorteil durch Threads?
 
Ich verstehe auch nicht ganz, was du zu erreichen suchst oder dir erhoffst. Ist das "umwandeln" wirklich so aufwändig? Wenn ja, und das mehr oder minder gleichzeitig geschehen soll, würde ich dem Thread doch einmal mit auf den Weg geben, wie der Dateiname lauten soll und ihn dann das komplette Umwandeln, Anlegen der Datei, Reinschreiben und schließen übernehmen lassen.

Und: Wozu die WinAPI-Funktionen? Ich finde die Delphi-Klasse TThread viel sympathischer :love:

Ginko 9. Mai 2013 22:15

AW: Kein wirklicher Geschwindigkeitsvorteil durch Threads?
 
Ok, werde ich machen, kennt ihr ein paar gute Links zu dem Thema ?
Einen hab ich grad gefunden http://www.michael-puff.de/Programmi...mit_Delphi.pdf, ich seh grad der ist so umfangreich, der langt sicher erstmal...

@Der schöne Günther, das habe ich ja alles gemacht in der Funktion Umwandler

Der schöne Günther 9. Mai 2013 22:25

AW: Kein wirklicher Geschwindigkeitsvorteil durch Threads?
 
Ja, genau dieses Tutorial ist auch das einzige, was ich wirklich gelesen habe :lol:

Trotzdem bin ich kurz danach auf TThread-Objekte umgestiegen. Einfach nur eine .Execute-Methode schreiben, eventuell noch eine onTerminate um im Hauptthread-Kontext das irgendwie anzuzeigen, dass man fertig ist und die Sache hat sich.

Ich weiß nicht, was genau in deiner Threadfunktion vor sich geht, aber da Datei-Operationen auf Prozessbasis stattfinden könnte ich mir irgendwie vorstellen, dass der zweite Thread bsp. solange blockiert, bis der erste seine Datei zuende geschrieben hat. Welche Funktionen für die Dateioperationen benutzt du und in welcher Reihenfolge?

xaromz 9. Mai 2013 22:36

AW: Kein wirklicher Geschwindigkeitsvorteil durch Threads?
 
Hallo,

eine Sache ist bei Dateioperationen grundsätzlich zu beachten: meist ist der Dateizugriff der Flaschenhals; mit parallelen Zugriffen bremst man eine Festplatte (zumindest eine klassische) eher aus als das die Gesamtoperation beschleunigt wird.
Will sagen: Bevor Du Dein Programm parallelisierst, schau erst mal, wo genau die Zeit liegen bleibt.

Gruß
xaromz

Ginko 9. Mai 2013 22:57

AW: Kein wirklicher Geschwindigkeitsvorteil durch Threads?
 
Also die Funktion Umwandler sieht so aus:
Delphi-Quellcode:
function Umwandler(pDateiname: Pointer): Integer;
var
  AProcess: TProcess;
begin
  AProcess := TProcess.Create(nil);
  try
    AProcess.Executable := ExtractFilePath(application.ExeName)+'Umwandler.exe';
    AProcess.Parameters.Add(PThreadParams(pDateiname)^.Dat);
    AProcess.Options := AProcess.Options + [poWaitOnExit, poNoConsole];
    AProcess.Execute;
  finally
    AProcess.Free;
  end;
end;
Ob es TProcess in Delphi gibt weiß ich nicht genau.

Danke für die Antworten.

Der schöne Günther 10. Mai 2013 08:39

AW: Kein wirklicher Geschwindigkeitsvorteil durch Threads?
 
Ich bin verwirrt. Ich dachte, es geht um Threads? Entweder ist es für mich noch zu früh am Morgen, oder...

Du machst eine Reihe von Threads auf, wartest im Hauptprogramm auf die Beendigung des Threads, den du zuletzt aufgemacht hast. Der muss überhaupt nicht zwingend der letzte sein, wenn der zu Ende ist, können noch gut zehn andere laufen, obwohl sie früher gestartet wurden.

Die Threads selber erstellen einen komplett neuen Prozess (!), und warten wiederum auf die Beendigung dieses. Wozu überhaupt die Threads? Du kannst diese PRozesse doch genauso gut im Hauptthread deines Programms starten lassen.

Dass die Threads hier keinen Geschwindigkeitsvorteil bringen ist doch klar ;-) - Wenn es vorher schon auf mehrere Prozesse hinauslief, dann waren es vorher so oder so auch schon mehrere Threads.

mfg

jaenicke 10. Mai 2013 09:19

AW: Kein wirklicher Geschwindigkeitsvorteil durch Threads?
 
Am sinnvollsten wäre alle Programme zu starten und dann zu warten bis die alle fertig sind. Das war es dann auch schon.

hathor 10. Mai 2013 09:53

AW: Kein wirklicher Geschwindigkeitsvorteil durch Threads?
 
Zitat:

Zitat von Ginko (Beitrag 1214862)
Hallo, ich versuche gerade mehrere Dateien zu bearbeiten. Um das ganze zu beschleunigen, versuche ich es mit Threads zu machen. Es bringt aber nur ca 1sek. Bei der Auslastung wurde auch nur ein CPU beansprucht (die andere nur ein wenig)

Mal abgesehen davon, dass Du die Threads falsch anwendest, liegt das Hauptproblem am HDD-Zugriff.
Ein Lesekopf kann nicht gleichzeitig an mehreren Stellen sein. Da summieren sich die Positionierungszeiten...
Wenn man regelmässig so etwas machen muss, ist bessere Hardware (SSD) oder mehrere HDDs erforderlich.
Ausserdem weist man Threads verschiedenen Cores zu - wenn man welche hat...

Insider2004 10. Mai 2013 09:54

AW: Kein wirklicher Geschwindigkeitsvorteil durch Threads?
 
1. Hinweis: Festplatten sind nicht Thread-fähig.
2. Hinweis: Um Thread-Programmierung richtig zu machen, braucht man einiges an Erfahrung. Unser Hirn kann einfach keine Parallel-Kodierung leisten. Deshalb, such dir ein gutes Beispiel. Wobei die meisten Beispiele ziemlich kümmerlich sind.

Mavarik 10. Mai 2013 10:28

AW: Kein wirklicher Geschwindigkeitsvorteil durch Threads?
 
Naja und im übrigen - wie es auch in der SQLite Docu verlinkt ist - Threads sind schlecht :oops:

Mavarik


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:28 Uhr.
Seite 2 von 5     12 34     Letzte »    

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