Michael Gebhart
2003-12-08 09:45:33 UTC
Hi zusammen,
ich habe ein Programm geschrieben, was Anfragen via Sockets entgegennimmt
und diese bearbeitet. In meinem Buch wurde das so gehandhabt, dass bei jeder
Anfrage ein neuer Thread gestartet wird, der dann die Anfrage bearbeitet,
damit weitere Anfragen angenommen werden können und die Anwendung bis zum
Ende der Bearbeitung nicht blockiert ist. Allerdings möchte ich mit diesem
Programm auch durchaus mal 30 oder sogar 50 Anfragen pro Sekunde bearbeiten
und da kommt es nun darauf an, dass die Anwendung insbesondere auch dieser
Teil performant sind. Ist die Technik, bei jeder Anfrage einen neuen Thread
zu starten denn die ideale Handhabung? Alternativ könnte man es ja so
machen, dass man 10 Threads zu Beginn startet, bei jeder Anfrage wird eine
Warteschlange um die neue Anfrage ergänzt, die Anwendung nimmt dann sofort
weitere Anfragen entgegen und die 10 Threads bearbeiten nacheinander die
Elemente in der Warteschlange. Allerdings müssen die Threads dann regelmäßig
die Warteschlange checken und wenn die 10 Threads mal zu langsam sind, dann
wird die Warteschlange immer länger und es kommt zu starken Verzögerungen.
Hat da jemand Erfahrungen, wie man sowas in Java oder generell performant
umsetzt?
Dankbar für Vorschläge
Michael
ich habe ein Programm geschrieben, was Anfragen via Sockets entgegennimmt
und diese bearbeitet. In meinem Buch wurde das so gehandhabt, dass bei jeder
Anfrage ein neuer Thread gestartet wird, der dann die Anfrage bearbeitet,
damit weitere Anfragen angenommen werden können und die Anwendung bis zum
Ende der Bearbeitung nicht blockiert ist. Allerdings möchte ich mit diesem
Programm auch durchaus mal 30 oder sogar 50 Anfragen pro Sekunde bearbeiten
und da kommt es nun darauf an, dass die Anwendung insbesondere auch dieser
Teil performant sind. Ist die Technik, bei jeder Anfrage einen neuen Thread
zu starten denn die ideale Handhabung? Alternativ könnte man es ja so
machen, dass man 10 Threads zu Beginn startet, bei jeder Anfrage wird eine
Warteschlange um die neue Anfrage ergänzt, die Anwendung nimmt dann sofort
weitere Anfragen entgegen und die 10 Threads bearbeiten nacheinander die
Elemente in der Warteschlange. Allerdings müssen die Threads dann regelmäßig
die Warteschlange checken und wenn die 10 Threads mal zu langsam sind, dann
wird die Warteschlange immer länger und es kommt zu starken Verzögerungen.
Hat da jemand Erfahrungen, wie man sowas in Java oder generell performant
umsetzt?
Dankbar für Vorschläge
Michael