05.11.2013 Aufrufe

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

5.7 Zusammenfassung 299<br />

Zeiten aus Tabelle 5.6 zeigen als Kontrast die für 30 sequentielle Anfragen er<strong>mit</strong>telten<br />

Meßwerte. Mit Blick auf die serverseitig verbrauchte CPU-Zeit zeigt<br />

sich, daß die nebenläufigen Server die zusätzliche Flexibilität bei der Bearbeitung<br />

der Aufträge <strong>mit</strong> erhöhtem Rechenaufwand bezahlen. Ganz nebenbei hat<br />

sich natürlich auch die Komplexität des Quellcodes erhöht. Besonders deutlich<br />

ist dieser Anstieg des CPU-Verbrauchs bei den Varianten zu beobachten,<br />

die pro Anfrage eine neue Server-Instanz starten <strong>und</strong> dabei den Ressourcenverbrauch<br />

nicht li<strong>mit</strong>ieren.<br />

Die Clients der nebenläufigen Server profitieren direkt von Server-Systemen<br />

<strong>mit</strong> mehreren Prozessoren, da die nebenläufigen Server-Varianten im Gegensatz<br />

zu iterativen Servern in der Lage sind, die vorhandenen Ressourcen <strong>mit</strong>tels<br />

mehrerer Prozesse oder <strong>Threads</strong> auszuschöpfen. Dabei war es wenig überraschend,<br />

daß die nebenläufigen Server <strong>mit</strong> Prethreading oder Preforking bei<br />

unseren Messungen klar im Vorteil waren.<br />

Tabelle 5.7. Durchnittliche Antwortszeiten der Server-Varianten<br />

Server-Variante<br />

Durchnittliche Antwortszeit<br />

Iterativer Server<br />

514,83 Clockticks<br />

Nebenläufiger Server <strong>mit</strong> mehreren Prozessen<br />

39,40 Clockticks<br />

Nebenläufiger Server <strong>mit</strong> mehreren <strong>Threads</strong><br />

10,77 Clockticks<br />

Nebenläufige Server <strong>mit</strong> Preforking<br />

214,10 Clockticks<br />

Nebenläufige Server <strong>mit</strong> Prethreading<br />

212,53 Clockticks<br />

Die in Tabelle 5.7 aufgeführten durchschnittlichen Antwortszeiten zeigen, daß<br />

sich die strikte Ressourcenkontrolle der Preforking- bzw. Prethreading-Server<br />

auch auf die Reaktionszeiten der Server auswirkt. Im Gegensatz zu den einfachen<br />

nebenläufigen Servern ist das Antwortsverhalten dieser beiden Server-<br />

Varianten bei acht Server-Instanzen <strong>und</strong> 30 nebenläufigen Anfragen etwas<br />

weniger flüssig.<br />

In der Praxis wird deshalb oftmals auf eine dynamische Form des Preforking<br />

oder Prethreading zurückgegriffen: Der Server darf bei Bedarf (d. h. in Stoßzeiten)<br />

in einem bestimmten Rahmen neue Server-Instanzen starten <strong>und</strong> inaktive<br />

Instanzen zu einem späteren Zeitpunkt wieder beenden. Die Konstante<br />

NUM_THREADS des Prethreading-Servers würde in diesem Fall durch zwei Konstanten<br />

MIN_THREADS <strong>und</strong> MAX_THREADS abgelöst, welche die Minimal- <strong>und</strong><br />

Maximalzahl der vorab zu startenden Accept-Handler festlegt. Für prozeßbasierte<br />

Server wird analog verfahren.<br />

Ob nun prozeß- oder threadbasierte Server für eine konkrete Anwendung die<br />

bessere Wahl sind, hängt u. a. davon ab, ob von den Accept-Handlern auf gemeinsame<br />

Daten zugegriffen werden soll, ob der Server bestimmte Aktionen<br />

zwischen den Accept-Handlern synchronisieren muß oder ob bestimmte Arbeiten<br />

des Servers <strong>mit</strong> erweiterten oder reduzierten Privilegien ablaufen müssen.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!