kostenloser Webspace werbefrei: lima-city


Threading: Wieviele Threads sind Ok?

lima-cityForumProgrammiersprachenC/C++ und D

  1. Autor dieses Themas

    g****e

    Heyho

    Ich bin mit den Gedanken so ein wenig am Spielen, was man so machen könnte, und hatte überlegt vllt mal ne kleine Serverseitige Applikation zu schreiben. In meinen Gedanken ist das alles noch Wage, und nichts irgendwie genau, aber dabei bin ich über eine Sache gestolpert: Ich möchte wenn ganz gerne mehrere Verbindungen handeln, vllt schon an die 100 bis 1000 (ob es real dazu kommt sei dahingestellt, wahrscheinlich nur auf Requestbasis, aber mal angenommen halt), wie kann ich das dann so machen, dass es überhaupt noch funktioniert. Ich dachte zuerst daran mit Threads zu arbeiten, aaaber wieviele Threads kann ein normaler Server Handeln? Kann man dies überhaupt beziffern? Wenn ich davon ausgehe, die Software nur auf einem VServer zu starten, wo mir 1 CPU Kern zugesprochen ist, kann ich auf dem dann eine Software laufen lassen, die um die 100-1000 Threads hält? Ich habe mal gelesen für einige Dinge seien 10 schon zu viele? Muss ich jetzt schauen einen Workerprozess zu erzeugen, und dem über eine gemeinsame Resouce dann den Socket zu übergeben, dass ich statt Threads Forks erstelle?

    Kann mir da vllt jemand bissel was erklären, worauf ich vllt so ungefähr achten sollte bei dem Problem?

    Liebe Grüße
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Hallo ggamee,

    ob man genau sagen kann, wieviele Threads auf einem Server laufen können kann ich jetzt leider auch nicht genau sagen. Früher (auf 32 Bit Systemen) war der limitierende Faktor der Arbeitsspeicher. Jeder Thread wird ja einerseits durch ein Verwaltungsstruktur im Betriebssystem dargestellt und besitzt insbesondere einen eigenen Stack (~1MB). Daher konnte man rein rechnerisch ungefähr 2000 Threads in einem Programm haben (bei max. 2GB Speicher pro Programm). Das sollte auf 64 Bit Systemen aber kein Problem mehr sein.
    D.h. bis zu 1000 Threads sollte eigentlich gehen, sofern diese keine allzugroße CPU-Last erzeugen.
    Bei Threads, die z.B. große Datenmengen verarbeiten oder aufwändige Berechnungen durchführen würde man nur einen Thread pro (logischen) CPU-Kern nehmen, da mehr keinen Sinn macht.
    Damit Du die Serverlast nicht allzusehr in die höhe treibst solltest Du Dir Thread-Pools anlegen. D.h. wenn ein Thread mit seiner Arbeit fertig ist, dann wird er nicht beendet sondern wird nur 'schlafen' gelegt. Wenn dann eine neue Anfrage kommt wird er dann einfach wieder aufgeweckt und kümmert sich darum.
    Dadurch sparst Du den Aufwand für das Erzeugen und Zerstören der Threads ein, was insbesondere bei vielen kleinen Anfragen eine relativ großen Anteil der gesamten CPU-Last annehmen kann.
  4. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    ggamee schrieb:
    ... dass ich statt Threads Forks erstelle?
    Nur ist ein Fork auch nichts anderes als ein Thread...
  5. Nun ja,

    unter *nix Systemen führt ein fork() im Allgemeinen zur Erzeugung eines neuen Prozesses. D.h. der Heap-Speicher ist getrennt während er bei Threads gleich ist. Aber es wird wohl keinen großen Unterschied machen, ob man einen Thread- oder einen Prozess-Pool hat.

    Beitrag zuletzt geändert: 11.5.2012 20:51:12 von darkpandemic
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!