![]() |
.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 |
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 |
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 :) .
|
Re: .NET und Threads
Falls es darum geht, in den Threads auch State zu halten: 1000 schlafende Threads sollte jedes OS verkraften.
|
Re: .NET und Threads
Ich erhöhe sein Limit mal auf 5000 Threads. ;)
|
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. |
Re: .NET und Threads
Hmm, was passiert, wenn während der 100ms Daten ankommen? Die müssten ja verarbeitet werden, ohne Wartezeit.
|
Re: .NET und Threads
Die 100ms sind ja gerade die simulierte Wartezeit auf die Daten ;)
|
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.
|
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 01:40 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