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
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, 18: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 10: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, 18: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, 18: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, 19: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.687 Beiträge
 
Delphi 2007 Enterprise
 
#5

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

  Alt 23. Nov 2014, 05: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, 10: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
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 04:41 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