Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi [Indy] Threadmanager benutzen (https://www.delphipraxis.net/145976-%5Bindy%5D-threadmanager-benutzen.html)

Win32.API 11. Jan 2010 18:54


[Indy] Threadmanager benutzen
 
Hallo,

in diesem Thread wurde ich darauf hingewiesen, dass Indy die Moeglichkeit bietet Threadmanager zu verwenden, um die Anzahl der Threads zu begrenzen und trotzdem keine begrenzung der Connections herbeizuführen.
Ich finde allerdings keine Informationen dazu, kann hier jemand helfen?


Grueße,
Win32.API

Assertor 11. Jan 2010 19:23

Re: [Indy] Threadmanager benutzen
 
Hallo Win32.API,

Zitat:

Zitat von Win32.API
Hallo,

in diesem Thread wurde ich darauf hingewiesen, dass Indy die Moeglichkeit bietet Threadmanager zu verwenden, um die Anzahl der Threads zu begrenzen und trotzdem keine begrenzung der Connections herbeizuführen.
Ich finde allerdings keine Informationen dazu, kann hier jemand helfen?

Indy bietet Dir einen entsprechenden Scheduler (ich gehe jetzt mal nur auf den Thread-basierten Scheduler ein, Fibers sind zwar im SuperCore auch verfügbar aber ich weiß aktuell nicht um deren Zustand):

1) Zieh mal einen IdSchedulerOfThreadPool auf das Form und setzte PoolSize z.B. auf 8. MaxThreads ruhig bei default (0) lassen, da das ein hartes Limit ist und zu (gewollten) Exceptions bei Überschreiten führen würden.

2) Weise TIdTCPServer (oder anderer Server-Komponente) den Threadpool über den OI hinzu (.Scheduler Property).

Unter Indy 9 hatte der Scheduler den Namen ThreadMgr, unter Umständen hilft Dir das weitere Informationen zu finden, die weitestgehend auch für den Scheduler zutreffen.

Gruß,

Assertor

Win32.API 11. Jan 2010 19:39

Re: [Indy] Threadmanager benutzen
 
Hallo Assertor,

vielen Dank fuer die schnelle Antwort, aber leider bringt dies nicht das gewuenschte Ergebnis, es werden bei 500 Connectes weiterhin 500 Threads erstellt. Verstehe ich etwas falsch, oder liegt ein Fehler vor? Ich verwende Indy 10.

Grueße,
Win32.API

Assertor 11. Jan 2010 20:51

Re: [Indy] Threadmanager benutzen
 
Hallo Win32.API

Zitat:

Zitat von Win32.API
vielen Dank fuer die schnelle Antwort, aber leider bringt dies nicht das gewuenschte Ergebnis, es werden bei 500 Connectes weiterhin 500 Threads erstellt. Verstehe ich etwas falsch, oder liegt ein Fehler vor? Ich verwende Indy 10.

Ich halte mal Rücksprache und geb Dir später hier bescheid.

Gruß,

Assertor

Assertor 12. Jan 2010 09:20

Re: [Indy] Threadmanager benutzen
 
Hallo Win32.API,

ich habe mir mein Wissen zum Indy ThreadPool sicherheitshalber kurz bestätigen lassen, leider ist das was Du machen möchtest nicht möglich:

Der TIdTCPServer benötigt immer einen Thread pro Verbindung zu einem Client (Socket), wenn weniger Threads da wären, könnten die Clients nicht bedient werden. Wir sprechen hier also wirklich - mit und ohne ThreadPool - von einer 1:1 Relation. Das Pool Limit steuert nur die Anzahl inaktiver Threads. MaxThreads limitiert die Anzahl aktiver Threads, aber dies ist wie erwähnt ein hartes Limit: Wird es überschritten, wird eine Exception geraist und der Client wird unverzüglich disconnected.

Wenn Du jetzt weniger aktive Threads haben willst, kannst Du TIdTCPServer nicht nutzen, sondern mußt irgendeine non-blocking Server-Komponente nutzen oder Deinen eignenen Code für I/O Completion Ports schreiben.

Es gab einen Ansatz dies zu ändern, das Indy SuperCore Package. Hier sollte ein einzelner Thread durch die Nutzung von Fibers mehrere Clients bedienen. Leider wurde das Package nie fertig gestellt und liegt seit Jahren nun herum.

Gruß Assertor

Win32.API 12. Jan 2010 19:18

Re: [Indy] Threadmanager benutzen
 
Vielen Dank fuer die Erklärung, werde mal schauen, wie ich mein weiteres Vorgehen realisiere.

Assertor 13. Jan 2010 10:35

Re: [Indy] Threadmanager benutzen
 
Hallo Win32.API,

Zitat:

Zitat von Win32.API
Vielen Dank fuer die Erklärung, werde mal schauen, wie ich mein weiteres Vorgehen realisiere.

Bitte, gerne! Schade das Indy Dir dann nicht helfen kann, aber dafür ist diese Frage bzgl. ThreadMgr/Pool hier im Forum auch mal abschließend geklärt.

Trotzdem viel Glück bei der Umsetzung!

Gruß,

Assertor

:dp:


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:48 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