Thread Managment für einen Server



  • Hallo zusammen,

    Nun vorraus erstmal paar Informationen zu dem Server:
    - Ein Listener.
    - Muss einige Verbindungen / Aktive Verbindungen aushalten (mind. 1000+)
    - Viele kleinere DatenPackete jedoch häufig.

    So nun möchte ich zuerst mir überlegen wie ich das ganze Threade. Zuerst dachte ich mir:

    1. Thread: Warten auf Verbindungen. Und Akzeptiert diese.
    Dann pro Connection 1 Thread der auf Narchichten / Packets wartet und diese behandelt.

    Nun denke ich mir jedoch.. Hm bei 1000 Verbindungen -> 1000 Threads. Schon ein bisschen krass oder?

    Dann kamm ich auf meine jetzige Idee.1 Thread wiegehabt für den Listener. Dann soll eine ThreadQueue eine maximale Anzahl an Threads zu verfügung geben. zB 50
    Wenn keiner mehr Frei ist muss gewartet werden bis wieder einer Frei ist. Klingt ja ansich ganz gut. Dann frage ich mich wiederum ist der Methode: 1. Effektiver und/oder 2. Perfomanter.

    Die 2. Möglichkeit könnte man dann sogar noch mit Priority ausbauen, falls dies irgentwann benötigt wäre.

    Nur wie kann ich das nun Realisieren, ich meine klar, Threads erstellen, eine Variable + 1 rechnen. Prüfen ob der Maximum erreicht ist.. So bis dahin ist es einfach, nur woher weiß ich wen ein Thread beendet ist/ durch gelaufen ist.

    Vorallen gibt es vielleicht sogar noch eine bessere Möglichkeit?



  • Für Server ohn ekompelxe Interaktion ist 2) sicherlich angemessen. Windows bietet sogar API-Funktionen an, die das ein wenig unterstützen. http://msdn.microsoft.com/en-us/library/ms686756(VS.85).aspx

    Viele der Speed-Überlegungen sind leider Aberglaube. Hier ausnahmsweise mal ein Skeptiker: http://www.usenix.org/events/hotos03/tech/vonbehren.html



  • Guck dir doch Boost.Asio an.
    Es bietet dir einen Wrapper um die IOCP Technologie von Windows, mit Thread Pool und einem Pattern für Asynchrone Kommunikation.



  • Das schreit ja fast nach boost.asio. Schau dir da mal die Examples, gerade die für http-server an, da sind verschiedene Ansätze vorgestellt, von je ein Thread/Connection bis hin zu Asynchroner Threadpoollösung.

    Wahrscheinlich, zumindest denke ich mir das, wäre Threadpool aber wirklich am schlauesten - und mit Asio in nur ein paar wenigen Zeilen implementiert.



  • Coole Sache, ist das ganze auch so Performant wie es klingt?



  • ja. 🕶


Anmelden zum Antworten