AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Maximale Threadanzahl / Anzahl der Threads für Programm / Prozeß erhöhbar?
Thema durchsuchen
Ansicht
Themen-Optionen

Maximale Threadanzahl / Anzahl der Threads für Programm / Prozeß erhöhbar?

Ein Thema von Delphi-Laie · begonnen am 22. Nov 2014 · letzter Beitrag vom 25. Nov 2014
Antwort Antwort
Seite 1 von 3  1 23      
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#1

Maximale Threadanzahl / Anzahl der Threads für Programm / Prozeß erhöhbar?

  Alt 22. Nov 2014, 17:16
Liebe Delphifreunde!

Zur Zeit bastele ich an einem Algorithmus, der aus dem vollen schöpft und Threads in fast beliebiger Anzahl kreiert. Inzwischen läuft er auch so, wie er soll, fehlt nur noch der Feinschliff, so dieses Problem: Windows verweigert bei irgendeiner Threadanzahl die Erstellung weiterer Threads. Folge ist, daß das Programm stehenbleibt. In meinem Windows 7 64 Bit z.B. wird - anscheinend ist das nicht bei jedem Programm gleich - bei 1.000 < x < 1.500 Threads die Neuerstellung weiterer Threads blockiert.

Nun meine Frage: Gibt es irgendeine Möglichkeit (API-Funktion o.a.?), Windows "anzubetteln", daß man die maximale Anzahl dieser Threads für das jeweilige Programm erhöhen kann?

Bitte jetzt keine Hinweise, daß das schlechter Programmierstil sei, das ist mir bekannt. Mir geht es nämlich gerade darum, möglichst viel (scheinbar oder tatsächlich) gleichzeitig ablaufen zu lassen und das auch darzustellen, also lebt eine solche Demonstration geradezu von der Anzahl ihrer Threads. Um das Nähkästchen zu öffnen: Das klassische Mergesort läßt sich parallelisieren, und das möchte ich visualisieren, was mir, wie gesagt, inzwischen gelang.

Vielen Dank und Gruß

Delphi-Laie

Geändert von Delphi-Laie (23. Nov 2014 um 09:25 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Maximale Threadanzahl / Anzahl der Threads für Programm / Prozeß erhöhbar?

  Alt 22. Nov 2014, 17:20
Jeder Thread hat einen Stack und irgendwann ist eben kein Speicher mehr da.

http://blogs.msdn.com/b/oldnewthing/...29/444912.aspx
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#3

AW: Maximale Threadanzahl / Anzahl der Threads für Programm / Prozeß erhöhbar?

  Alt 22. Nov 2014, 17:26
Jeder Thread hat einen Stack und irgendwann ist eben kein Speicher mehr da.

http://blogs.msdn.com/b/oldnewthing/...29/444912.aspx
Das hilft mir schonmal sehr weiter, besten Dank! D.h., wenn man die Stackgröße erhöht, dann hat man auch die Chance, daß mehr Threads gestartet werden können, nicht wahr?
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#4

AW: Maximale Threadanzahl / Anzahl der Threads für Programm / Prozeß erhöhbar?

  Alt 22. Nov 2014, 18:00
So, ich habe selbst erfolgreich herumexperimentiert: Man muß die maximale Stackgröße verringern, dann passen auch mehr Threads in den Prozeß (bildlich gesprochen).
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#5

AW: Maximale Threadanzahl / Anzahl der Threads für Programm / Prozeß erhöhbar?

  Alt 23. Nov 2014, 04:45
Für genauere Infos zu den internen Abläufen dazu, siehe diesen Blog-Eintrag. Allerdings muss man auch trotz dieser berechenbaren Dinge aufpassen, da die letztendliche Anzahl stark mit davon beeinflusst wird, wie viel Speicher der Elternprozess bereits nutzt, und wie stark dieser fragmentiert ist. Wenn man also nicht 100% weiss was der Delphi MM tut, und dieses voll deterministisch auf den eigenen gesamten Code angewended quatifizieren kann, wird eine harte feste definitive theoretische Zahl mit praktischer Relevanz ziemlich unmöglich.

In einem Stackoverflow-Thread habe ich auch noch die Aussage gefunden (auf 32 Bit Prozesse bezogen):
Zig: Quasi immer möglich
Hunderte: Vermutlich meistens okay, je nach dem
Tausende: Fast nie erfolgreich

Ich denke, mit deinen 1000-1500 bist du schon recht nah an der praktisch möglichen Grenze für den allgemeinen Fall.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#6

AW: Maximale Threadanzahl / Anzahl der Threads für Programm / Prozeß erhöhbar?

  Alt 23. Nov 2014, 09:22
Danke!

Ich denke, mit deinen 1000-1500 bist du schon recht nah an der praktisch möglichen Grenze für den allgemeinen Fall.
Ich weiß nicht, was genau alles auf dem Stack abgelegt wird - Variablen gewiß, aber auch Code? Gerade bei letzterem wäre der Stack viel eher gefüllt.

Für mich ein Grund mehr, den Stack nicht zu mögen, der war mir noch nie sympathisch. Jetzt tut sich sogar noch ein Zielkonflikt auf: Threadanzahl versus Rekursion.

Was schätze ich deshalb stack-, konkreter rekursionsbefreite Algorithmen, nur, in diesem Falle geht es wohl nicht ohne Stack, und diese "Stellschraube" zur Erhöhung der Threadanzahl war mir vorher auch gar nicht bekannt.
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#7

AW: Maximale Threadanzahl / Anzahl der Threads für Programm / Prozeß erhöhbar?

  Alt 23. Nov 2014, 13:46
Für mich ein Grund mehr, den Stack nicht zu mögen, der war mir noch nie sympathisch.
Das ist irgendwie schon eine lustige Aussage
Der Stack ist einfach eine (ziemlich effiziente) Datenstruktur zur Speicherverwaltung.

Ich weiß nicht, was genau alles auf dem Stack abgelegt wird.
Im Grunde Argumente, Rücksprungadressen und lokale Variablen (+ temporäre Zwischenergebnisse). In der Regel kein Code.
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#8

AW: Maximale Threadanzahl / Anzahl der Threads für Programm / Prozeß erhöhbar?

  Alt 23. Nov 2014, 15:39
Steht alles in dem verlinkten Artikel.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.763 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Maximale Threadanzahl / Anzahl der Threads für Programm / Prozeß erhöhbar?

  Alt 24. Nov 2014, 08:54
Aussage, die früher oder später hier kommen muss: Was machst du Dir eigentlich Gedanken über die maximal mögliche Thread-Anzahl? Abseits von einem Server, gibt es keine sinnvolle (aka zeitsparende) Anwendung von mehr Threads als CPU-Kernen. Da Du sicherlich nicht der Herr über 1000+ Kerne bist (auf jeden Fall nicht, wenn Du mit Delphi entwickelst), ist das doch allenfalls eine akademische Frage, oder?

Aber falls Du einen wie auch immer gearteten Server entwickelst, solltest Du Dir überlegen eventuell ruhende Verbindungen (=Threads) auszulagern. Dafür gibts sicherlich einen coolen Pattern Namen, der mir aber gerade nicht einfallen will.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#10

AW: Maximale Threadanzahl / Anzahl der Threads für Programm / Prozeß erhöhbar?

  Alt 24. Nov 2014, 09:05
Hatt ich mir auch gedacht, dann hab ich den letzten Absatz im ersten Post gelesen

Aber was in dem Kontext sicherlich auch spannend wäre: Zeige, wie sich unterschiedliche Threadanzahlen auf das Laufzeitverhalten auswirken. I.e.: Lass die Simulation mal mit 1, 10, 100, 500, 1000 etc. Threads laufen und vergleiche das Ergebnis. Der größte Trugschluss den ich in Konversationen über Parallelisierung gefunden habe ist, dass mehr Threads mehr Geschwindigkeit bedeuten.

Abseits von einem Server, gibt es keine sinnvolle (aka zeitsparende) Anwendung von mehr Threads als CPU-Kernen.
Doch. Einfachstes Beispiel: Threads brauchen teure IO-Operationen. Während ein Thread auf die Festplatte wartet, kann ein anderer den Kern einnehmen. Das geht natürlich nur, wenn du mehr Threads als Kerne hast
Natürlich, es braucht ein gesundes Maß von Threads vs Kernen.
Mike
Passion is no replacement for reason

Geändert von JasonDX (24. Nov 2014 um 09:07 Uhr) Grund: Weil ich es muss.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 08:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz