AGB  ·  Datenschutz  ·  Impressum  







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

programm mit thread langsamer als ohne

Offene Frage von "jaenicke"
Ein Thema von canonmclay · begonnen am 7. Jun 2011 · letzter Beitrag vom 10. Jun 2011
Antwort Antwort
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.646 Beiträge
 
Delphi 12 Athens
 
#1

AW: programm mit thread langsamer als ohne

  Alt 8. Jun 2011, 10:17
SetThreadAffinityMaskByID(getcurrentthreadid,1);
Dir ist schon klar, daß das Create im Kontext des Hauptthreads aufgerufen wird? Der obige Befehl wirkt sich somit lediglich auf den Hauptthread aus und nicht auf den des gerade erzeugten TThread-Objekts.

Du kannst aber auch mal testen, wie das Verhalten ist, wenn du die beiden Synchronize-Aufrufe auskommentierst. Damit könnte man eventuell die Thread-Synchronisation als Bremse ausschließen.

Nebenbei wichtig: welche Delphi-Version nimmst du?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
canonmclay

Registriert seit: 7. Jun 2011
12 Beiträge
 
#2

AW: programm mit thread langsamer als ohne

  Alt 8. Jun 2011, 14:22
SetThreadAffinityMaskByID(getcurrentthreadid,1);
Dir ist schon klar, daß das Create im Kontext des Hauptthreads aufgerufen wird? Der obige Befehl wirkt sich somit lediglich auf den Hauptthread aus und nicht auf den des gerade erzeugten TThread-Objekts.

Du kannst aber auch mal testen, wie das Verhalten ist, wenn du die beiden Synchronize-Aufrufe auskommentierst. Damit könnte man eventuell die Thread-Synchronisation als Bremse ausschließen.

Nebenbei wichtig: welche Delphi-Version nimmst du?

>achso ich dachte man musst das im create nutzen... naja ich habs mal weggemacht
>auch das ausklammern der synchros hat keinen effekt auf die geschwindigkeit
>ich gurke auf einer version 6 rum...


Naja, was du machst ist ja explizit nicht mehrere Threads parallel laufen zu lassen, sondern nach dem Ende eines Threads den nächsten Datensatz anzufordern.

Du rechnest also weiter hintereinander, nicht parallel, nur dass die Threadsynchronisierung dazukommt. Das kann nur länger dauern.

Zudem blitzen die Threads nur kurz auf, die sind bei mir in dem Beispielprogramm nach vielleicht einer Sekunde jeweils fertig. Das macht auch nicht ganz so viel Sinn.

Besser wäre, wenn du gleich mehrere Aufträge verteilst, damit der Thread auch ein bisschen was zu tun hat und außerdem auch mehrere Threads parallel laufen lässt. Stichwort Threadpool zum Beispiel.
Außerdem solltest du die Zuweisung an einen bestimmten Kern weglassen. Windows verteilt das in der Regel schon am besten alleine.
> naja ich wär erstmal froh, wenn das mit einem Thread vernünftig läuft, daher lasse ich bisher nur einen laufen
> ich möchte ja, das erst nachdem ein Paket bearbeitet wurde, der Server kontaktiert wird, und ein neues Paket angefordert wird, demnach muss ich warten bis der thread fertig ist. Außerdem, macht eine threadsynchronisierung einen unterschied von fast 14 sek aus?
>Zu deinem PC: was für eine CPU hast du 0o. Im normalen Programm schaff ich ein Paket in ca. 7sek, mit einem Thread ca. 20 sek. (Dual - Core E6300 mit 1,86GHz, bei nem Kumpel 2,8GHz ca. 4 und 12 sek.). Von daher wenn ich die Pakete größer mache, dann muss ich ja 81.450.625 Schleifendurchgänge Rechnen, anstatt ca. 800.000 ... das dauert dann viel zu lange...
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#3

AW: programm mit thread langsamer als ohne

  Alt 8. Jun 2011, 15:25
Mal so rein grundsätzlich:
Bei reinen Rechenthreads darf man maximal so viele Thread benützen, wie unabhängige CPU-Kerne im System vorhanden sind.
Beispiel:
4 logische Cores (Hypherthreading), 2 physische Cores
Hier darf man maximal 2 Rechenthreads verwenden.
Würde man 4 Threads verwenden, dann würde zwar jeder logische Core voll ausgelastet werden, die Gesamtperformance wäre aber schlechter als bei nur 2 Threads.
Andreas
  Mit Zitat antworten Zitat
canonmclay

Registriert seit: 7. Jun 2011
12 Beiträge
 
#4

AW: programm mit thread langsamer als ohne

  Alt 8. Jun 2011, 15:42
klingt logisch^^... ich hab ja 2 "echte" kerne... aber es fluppt halt nichtmal bei einem Thread :/
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

AW: programm mit thread langsamer als ohne

  Alt 8. Jun 2011, 17:39
Bei dir ist ganz klar das syncronize schuld.
Und wenn du nur einen Thread hast ist auch klar das es langsamer ist. Denn neben deinem einen Thread gibt es ja immer noch den Hauptthread der auch ab und an Rechenzeit braucht für die Darstellung etc.
Aber an deinem Quelltext ist ganz klar das Syncronize als Falschenhals auszumachen. Poste doch lieber Nachrichten an den Hauptthread oder stopf den Status in eine Variable die vom Hauptthread in Regelmäßigen Abständen abgefragt wird. Das ist alle mal schneller als ein syncronize.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
canonmclay

Registriert seit: 7. Jun 2011
12 Beiträge
 
#6

AW: programm mit thread langsamer als ohne

  Alt 8. Jun 2011, 20:25
synchro KANN gar nicht schuld sein, denn dann müsste das ja 14 sek brauchen um in dieser zeit 2 mal zu aktualisieren, und das wäre ein wenig viel oder?

Außerdem habe ich das testweise mal auskommentiert und es hat sich nichts verbessert...

der hauptthread kann ja gar nicht so viel ziehn, außerdem ist meine cpu auslastung (task manager) bei genau 50%, also müsste der hauptthread ja extrem viel ziehn, obwohl der ja gar nix macht...
  Mit Zitat antworten Zitat
canonmclay

Registriert seit: 7. Jun 2011
12 Beiträge
 
#7

AW: programm mit thread langsamer als ohne

  Alt 9. Jun 2011, 18:48
so ich gebs auf^^... leider hat keiner der denkansätze mehr was ergeben (ich hab sogar meinen inkompetenten ex-infolehrer gefragt, der hat mich mit fragezeichen in den augen angeschaut, als ich was von Threads erzählt habe...)

fazit: ich versuch dieses Progi mit c++ und werde mich da mal einarbeiten


vielen Danke für eure hilfe

greez McLay
  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 16:59 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