Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   C# .NET und Threads (https://www.delphipraxis.net/126831-net-und-threads.html)

Neutral General 3. Jan 2009 01:34


.NET und Threads
 
Hi,

Ich programmiere (bzw werde bald programmieren) einen recht großen Server mit C#. Das einfachste wäre es, einfach für jeden Clienten einen eigenen Thread zu erstellen und darin die Anfragen des jeweiligen Clients zu bearbeiten.

Allerdings kann es sein, dass 500 oder sogar 1000 Clients mit dem Server verbunden sind. Zumindest möchte ich, dass der Server das aushält. Ich dachte mir, dass ich dann nicht für jeden Clienten einen eigenen Thread erstellen kann, da dann evtl. das System leicht überfordert sein könnte. Also hab ich überlegt jeweils 20-50 Clients in einem Thread zu bearbeiten.

Das ganze ist allerdings dann auch etwas problematisch, da alles so asynchron wie möglich geschehen sollte, und dann auch wahrscheinlich zwischendurch clients den Thread wechseln würden. (d.h. ein anderer Thread wäre auf einmal für einen bestimmten Clienten verantwortlich).

Das ganze wäre dann schon ein ganzes Stück komplexer und son bisschen hick hack.

Von daher ist halt meine Frage, ob man nicht doch bedenkenlos 500-1000 Threads laufen lassen kann oder ob es andere Vorschläge gibt, wie man so eine große Anzahl von Clients verwalten kann.

Gruß
Neutral General

xaromz 3. Jan 2009 08:53

Re: .NET und Threads
 
Hallo,

das Stichwort leutet ThreadPool.
Da stellst Du einfach nacheinander die Aufgaben rein und der nächste freie Thread kümmert sich drum.

Gruß
xaromz

Khabarakh 3. Jan 2009 09:15

Re: .NET und Threads
 
Genau, wobei asynchrone Methoden wie TcpListener.Begin*, NetworkStream.Begin*, ... den ThreadPool bereits ohne weiteres Zutun benutzen. Wenn also auf 90% Cleints sowieso nur in einer dieser Methoden gewartet wird, werden nur 50-100 Threads benötigt, die dann duch den Pool recycelt werden. Das sollte reichen :) .

Dax 3. Jan 2009 09:47

Re: .NET und Threads
 
Falls es darum geht, in den Threads auch State zu halten: 1000 schlafende Threads sollte jedes OS verkraften.

Die Muhkuh 3. Jan 2009 09:50

Re: .NET und Threads
 
Ich erhöhe sein Limit mal auf 5000 Threads. ;)

Dax 3. Jan 2009 09:57

Re: .NET und Threads
 
(Wessen^^)

1000 sind natürlich keine Obergrenze. Ich merke auch bei 10k Threads, die sich alle 100ms schlafen legen (damit der Scheduler immer zu arbeiten hat) nichts von der zusätzlichen Last.

Die Muhkuh 3. Jan 2009 10:03

Re: .NET und Threads
 
Hmm, was passiert, wenn während der 100ms Daten ankommen? Die müssten ja verarbeitet werden, ohne Wartezeit.

Dax 3. Jan 2009 10:05

Re: .NET und Threads
 
Die 100ms sind ja gerade die simulierte Wartezeit auf die Daten ;)

Die Muhkuh 3. Jan 2009 10:07

Re: .NET und Threads
 
Gehen wir mal von einem "extrem-Fall" aus. Es sind 5000 clients verbunden, alle senden alle 10ms Daten, die muss der Server verarbeiten und wieder an alle zurücksenden. Ich finde, dass das ein bisschen viel für ne Maschine sein wird.

Dax 3. Jan 2009 10:09

Re: .NET und Threads
 
Das natürlich, aber die Rede war ja sowieso nur von 500 bis 1000 Clients. Und wenn man davon ausgeht, dass dafür ein Server bereitsteht, der für derartige Dinge explizit ausgelegt ist, dann wird der auch bei 2000 daueraktiven Clients wohl nicht in die Knie gehen :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:10 Uhr.
Seite 1 von 2  1 2      

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