![]() |
Wie viele Threads kann man in einer Anwendung starten?
hi,
wie viele Threads kann ich in einer Anwendung starten? So das Windows und meine Anwendung das noch hinbekommt. Gibt es da eine Begrenzung? |
Re: Wie viele Threads kann man in einer Anwendung starten?
bin mir nicht sicher aber ich denke es gibt keine begrenzung...^^
ok mit ueber 20threads hab ich auch noch nicht gearbeited aber was hast du vor bzw wieviele threads willst du denn?^^ o0o |
Re: Wie viele Threads kann man in einer Anwendung starten?
Zitat:
Spätestens, wenn keine Handles mehr verfügbar sind. Ich meine, mich zu erinnern, dass es vor langer Zeit mal eine Diskussion darüber gab. Such doch mal nach "Anzahl Handles" oder so. Und schreibe Deine Erkenntnis dann auch wieder hier rein. |
Re: Wie viele Threads kann man in einer Anwendung starten?
![]() Zitat:
|
Re: Wie viele Threads kann man in einer Anwendung starten?
Wenn jeder Thread rechenintensive Aufgaben übernimmt, dann ist die max. sinnvolle Anzahl die der Prozessoren bzw. Cores. Auf Prozessoren mit HT, weniger eins. Das sind meine Erfahrungen.
Wenn Deine Threads aber viel Zeit mit "Warten" verbringen, dann sind mehr durchaus praktikabel. ...:cat:... |
Re: Wie viele Threads kann man in einer Anwendung starten?
Also ich hatte mal aus langeweile ein Programm geschrieben, dass ständig neue Threads erstellt. Habs gestartet und nach wenigen Sekunden reagierte mein System kaum noch (Ein-Prozessor-System). Der Taskmanager war offen und zeigte mir um die 7000 Threads an. Task beenden oder PC herunterfahren ging nicht. Da half nur der Resetknopf.
Fazit: Es gibt definitiv eine Obergrenze^^ |
Re: Wie viele Threads kann man in einer Anwendung starten?
es soll per dienst verschiedene dinge überwacht werden.
Wollte für jedes object was ich überwache einen thread erstellen. Glaube aber das es dann zu viele werden. |
Re: Wie viele Threads kann man in einer Anwendung starten?
oder ich erstelle für jedes objekt was überwacht werden soll einen timer, da kann ich den intervall auch noch eingeben.
|
Re: Wie viele Threads kann man in einer Anwendung starten?
Moin Thomas,
was für Objekte willst Du denn überwachen? Vielleicht wäre auch ![]() |
Re: Wie viele Threads kann man in einer Anwendung starten?
Ein Threadpool wäre bei sehr vielen Aufgaben gut geeignet.
Grundprinzip: Es gibt eine Jobliste (z.B. 200 Jobs) und einen Pool von Threads (z.B. 5 Stück). Die Threads legen los und holen sich jeweils einen Job aus der Liste und arbeiten den Job ab. Wenn ein Thread fertig ist, dann holt er sich den nächsten unerledigten Job - bis die Jobliste leer ist. Parallel zu den arbeitenden Threads kann die Hauptanwendung stets neue Job in die Liste eintragen. ![]() |
Re: Wie viele Threads kann man in einer Anwendung starten?
Zitat:
möchte z.b 20 dateien im abstand von 10 sekunden prüfen ob eine änderung vorgenommen wurde. |
Re: Wie viele Threads kann man in einer Anwendung starten?
Es gibt als Gegenstück zu den Threads noch Fiber. Diese sind leichter zu verwalten. Gibts aber erst afaik ab Win2k.
|
Re: Wie viele Threads kann man in einer Anwendung starten?
Zitat:
Da nimmt die die Win-API die meiste Arbeit ab. Du kannst Dich dafür registrieren, dass Du bei Änderung einer Datei/Verzeichnis benachrichtigt wirst. Dafür gibt es auch Delphi-Komponenten. Such mal hier im Forum oder bei torry.net nach DirectoryMonitor oder DirMonitor. |
Re: Wie viele Threads kann man in einer Anwendung starten?
Zitat:
Das kenn ich nämlich auch nicht... |
Re: Wie viele Threads kann man in einer Anwendung starten?
Zitat:
|
Re: Wie viele Threads kann man in einer Anwendung starten?
Ich glaube nicht, dass Fiber hier nützlich sind.
Für die, die nicht wissen, was Fiber sind: Ein Thread kann mehrere Fiber verwalten. Mit Fibern kann man eine Art Multithreading realisieren, aber kein präemptives, sondern nur kooperatives, da zu einem anderen Fiber nur gewechselt wird, wenn man SwitchToFiber aufruft. Da Fiber aber nicht wirklich parallel arbeiten und sich auch nicht in kurzen Zeiträumen abwechseln, denke ich nicht, dass sie in der genannten Angelegenheit von Nutzen sind. |
Re: Wie viele Threads kann man in einer Anwendung starten?
Zitat:
Ein Timer erzeugt einen Thread, in welchem er abgearbeitet wird. |
Re: Wie viele Threads kann man in einer Anwendung starten?
Zitat:
![]() ![]() Abgesehen mal davon, gibt es entsprechende API-Funktionen, um Verzeichnisse auf Änderungen zu überwachen ([dp]Verzeichnis überwachen[/dp]). |
Re: Wie viele Threads kann man in einer Anwendung starten?
Zitat:
Hab ich irgendwo behauptet, dass die API-Funktion SetTimer verwendet wird? Die VCL erstellt einen neuen Thread, wenn ein TTimer verwendet wird. Das ist doch richtig, oder nicht? |
Re: Wie viele Threads kann man in einer Anwendung starten?
@Luckie: also ich persönlich meinte ja den guten alten TTimer ;) Und ich war der Meinung dass sich der eines eigenen Threads bediente :gruebel:
|
Re: Wie viele Threads kann man in einer Anwendung starten?
Dann hast du eine andere VCL als ich. Meine verwendet SetTimer.
|
Re: Wie viele Threads kann man in einer Anwendung starten?
Nö, TTimer kapselt ganz billig Settimer und Killtimer.
Ich habe mich auch grad gewundert, wie ihr hier auf Threads kommt. :gruebel: Edit: Und ich dachte schon ihr wisst mehr über die interne Funktionsweise eines Timers von Windows. |
Re: Wie viele Threads kann man in einer Anwendung starten?
möchte aber nicht nur dateien prüfen, sondern auch anwendungen ob diese noch laufen etc.
wie würdet ihr das machen? alles mit threads? für jede anwendung /dienst einen thread oder würdet ihr nur einen thread für alles erstellen? |
Re: Wie viele Threads kann man in einer Anwendung starten?
Zitat:
|
Re: Wie viele Threads kann man in einer Anwendung starten?
Zitat:
Ihr habt mich überzeugt. Aber irgendwo habe ich mal gelesen, dass es so sein soll. Überprüft hab ich das nie selbst. Egal, es scheint nun nicht so zu sein, muss ich mir merken. |
Re: Wie viele Threads kann man in einer Anwendung starten?
Es gibt Timer die auf Threads basieren.
|
Re: Wie viele Threads kann man in einer Anwendung starten?
Zitat:
Kannst Du das erläutern? Lass mich nicht dumm sterben ;-) |
Re: Wie viele Threads kann man in einer Anwendung starten?
Alles über Timer, was man wissen muss:
![]() |
Re: Wie viele Threads kann man in einer Anwendung starten?
Mal ganz im Ernst, ich glaub ihr sucht hier in der falschen Richtung.
ich weiß, du willst Dateien überwachen, aber schau mal nach [dp]Verzeichnis überwachen[/dp] oder in Schnell: ![]() ![]() ![]() ![]() Zitat:
und man muß nicht ständig nachsehn. PS: für 20 Dateien würde auch ein Thread ausreichen (also nach deiner Methode) das prüfen einer Datei sollte schließlich nichtmal 'ne Sekunde dauern. PSS: Thread belegen Handles (und mehr) und Timer auch ... also bei Beschrenkung der Handles liegt die Grenze bei beiden gleich hoch. |
Re: Wie viele Threads kann man in einer Anwendung starten?
Raymond Chen hat sich schon über die
![]() So gesehen, gibt es keine künstlich gemachte Beschränkung. Allein der Speicherplatz entscheide über die maximale Anzahl von Threads. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:03 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