Hallo,
Nun habe ich aber das Problem das irgendwann das erzeugen von weiteren Threads fehlschlägt.
Wie viele Threads erzeugst Du denn? 300 Threads pro Prozess sollten selbst bei wenig Speicher problemlos möglich sein, wenn Du die Stack-Size reduzierst, dann weitaus mehr (dafür ist das mögliche Verschachtelungsniveau von Funktionsaufrufen nicht mehr so groß). Und wenn Du mehr Threads brauchst, dann solltest Du Dein Konzept etwas überdenken...
Vielleicht sollte ich noch etwas erwähnen. Der Thread, (der vom Hauptprozess gestartet wird), hört einen bestimmten Port ab und gibt die Anfrage an Kind-Threads weiter und lauscht dann weiter an dem Port.
Also es ist sowas was man auch gerne Server nennt.
Wenn Du Netzwerkserver implementierst, willst Du Dir evntuell das Worker-Modell ansehen (bitte auch die Links am Ende der Seite beachten).
Macht Apache nicht sowas ähnliches?
Für den Apache gibt es verschiedene Implementierungen:
- mpm_worker: Das setzt das Worker-Modell mit Threads um (so wie ich's Dir
vorgeschlagen habe).
- mpm_prefork: Das setzt auch das Worker-Modell ein, ALLERDINGS nutzt es
KEINE Threads, sondern separate Prozesse. Damit das ganze
funktioniert, werden Dateideskriptoren zwischen den
Prozessen hin- und hergeschoben, das geht dann schon etwas
tiefer in die Systemprogrammierung unter UNIX ein
(siehe dazu auch das Buch Stevens, Advanced Programming in
the UNIX Environment)
- und noch weitere, in der Praxis weniger relevante...
Viele Grüße,
Christian