AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Threads arbeiten nur auf einem Kern
Thema durchsuchen
Ansicht
Themen-Optionen

Threads arbeiten nur auf einem Kern

Ein Thema von Patrick · begonnen am 2. Jul 2010 · letzter Beitrag vom 2. Jul 2010
Antwort Antwort
blackfin
(Gast)

n/a Beiträge
 
#1

AW: Threads arbeiten nur auf einem Kern

  Alt 2. Jul 2010, 11:49
Auf welche Priorität sind denn die Threads gesetzt?
Ich habe die vage Vermutung, dass das gar nicht mal an Delphi liegt, sondern an Windows selbst.
Gibt es einen Unterschied und der Auslastungs-Verteilung, wenn du den Threads z.B. tpHigher oder tpHighest gibst?

Vielleicht hilft auch gfolgender Artikel:
http://hothardware.com/News/True-Mul...indows-Rework/

Interessant ist vielleicht auch folgender Artikel über FastMM, der vielleicht genau in diese Kategorie fällt?:
http://zachsaw.blogspot.com/2010/01/...d-apps-on.html

Zumindest folgende Kommentare daraus könnte vielleicht nützlich sein:

Zitat:
Notice that when you run the FastMM Test with CPU Affinity set to just one CPU, you'll end up with nearly the same performance as TBBMM. Once you enable multicores though, you'd immediately lose performance once again, running slower than with just one core.

Zitat:
There is a "bug" in the fastmm, floating around the internet.
This bug causes fastmm to call Sleep, when there are a contentions on Free. Try to set the "NeverSleepOnThreadContention" option and compile. You wil see this baby fly

Geändert von blackfin ( 2. Jul 2010 um 11:59 Uhr)
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#2

AW: Threads arbeiten nur auf einem Kern

  Alt 2. Jul 2010, 12:18
Gab es nicht in Delphi *und* im FastMM eine Einstellung wie
Delphi-Quellcode:
Multithreaded := true;
isMultithreaded := true;
Beim FastMM ist es in der Options Include mit drin.
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott

Geändert von mkinzler ( 2. Jul 2010 um 12:25 Uhr) Grund: Delphi-Tag eingefügt
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.372 Beiträge
 
Delphi 12 Athens
 
#3

AW: Threads arbeiten nur auf einem Kern

  Alt 2. Jul 2010, 12:53
@generic: Wenn man mit TThread einen Thread erstellt, dann wird diese Variable automatisch auf True gestellt.
(die WinAPI wie CreateThread macht sowas natürlich nicht, da es diese Delphi-Variable nicht kennen kann)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Patrick

Registriert seit: 15. Sep 2003
184 Beiträge
 
Delphi 2010 Professional
 
#4

AW: Threads arbeiten nur auf einem Kern

  Alt 2. Jul 2010, 13:04
Leider hatte weder IsMultiThread noch NeverSleepOnThreadContention einen Effekt.

Da die CPU Auslastung auf genau 50% (also ein Kern voll ausgelastet) verweilt, wenn die Threads laufen, glaube ich auch nicht, dass es daran liegt, dass FastMM langsam ist.

Hat noch jemand eine Idee?
Genieße jede Minute deines Lebens, denn sie wird nicht wieder kommen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.372 Beiträge
 
Delphi 12 Athens
 
#5

AW: Threads arbeiten nur auf einem Kern

  Alt 2. Jul 2010, 13:10
Hat noch jemand eine Idee?
Da die Gesamtleistung ja (wie schon richtig erkannt) maximal 100% einer CPU ergibt, wird wohl irgendwo etwas sein müssen, welches immer nur einen Thread am laufen läßt.

Aber ohne genauere Erkenntnis über das Innere deiner Threads, können wir auch nicht weiterhelfen.
Du mußt ja auch "nur" rausfinden, welcher Code bei dir dafür verantwortlich ist.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#6

AW: Threads arbeiten nur auf einem Kern

  Alt 2. Jul 2010, 13:18
Ihr belebt hier übrigens diesen Beitrag von 2004 neu:
http://www.delphipraxis.net/48397-tt...maschinen.html

Ich hatte mich damals damit abgefunden.
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.372 Beiträge
 
Delphi 12 Athens
 
#7

AW: Threads arbeiten nur auf einem Kern

  Alt 2. Jul 2010, 13:49
Was Anderes ...
sind bei dir eigentlich alles "echte" Kerne oder ist das nur so'ne Intel-Spar-CPU mit virtuellen Kernen?
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
shmia

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

AW: Threads arbeiten nur auf einem Kern

  Alt 2. Jul 2010, 16:51
Und wie oft wird in den Threads die Synchronize-Methode ausgerufen?
Jede Methode, die über Synchronize aufgerufen wird läuft im Kontext des Hauptthreads.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#9

AW: Threads arbeiten nur auf einem Kern

  Alt 2. Jul 2010, 21:38
Ich kann dieses Verhalten weder mit Lazarus noch mit Turbo Delphi 2006 (mit FastMM) nachstellen. Dabei verwenden meine Threads durchaus relativ häufig ReallocMem und Konsorten. Trotzdem gelingt es mir meine beiden CPU-Kerne voll auszulasten.

Meiner Vermutung ist auch eher, dass hier ein konzeptuelles Problem bei der Threadverwendung vorliegt (Threads blockieren sich gegenseitig/benötigen Ergebnisse des jeweils anderen/verwenden Synchronize). Meine Erfahrung mit Multithreading war, dass ich meine ersten Gehversuche damit mittlerweile auch komplett entsorgen konnte. IMHO liegt zu 90% ein Fehler in der Planung vor, wenn man irgendwo überhaupt die Synchronize-Funktion verwenden muss oder zu viele Bereiche mit Mutices oder CriticalSections schützen muss.

Ohne entsprechenden Beispielcode kann ich jedoch natürlich nur Raten was ein Problem sein könnte. Eventuell ist ja auch eine verwendete Komponente für das Verhalten verantwortlich, da sie selbst den gemeinsamen Zugriff auf eine eigene Resource synchronisiert und somit deine Threads ausbremst.

Andreas
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  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 05:48 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