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.

264 5 Netzwerkprogrammierung in der Praxis<br />

verbraucht wurden <strong>und</strong> berücksichtigt dabei sogar den CPU-Verbrauch aller<br />

Nachfahren, also auch aller Kind- <strong>und</strong> Kindeskindprozesse, was uns später bei<br />

den Serverimplementierungen <strong>mit</strong> mehreren Prozessen sehr gelegen kommt.<br />

Da wir lediglich an einer Gesamtzeit interessiert sind, addieren wir die Zeitdifferenzen<br />

der User- <strong>und</strong> Systemzeiten aller Prozesse.<br />

5.2.4 Eigenschaften <strong>und</strong> Einsatzgebiete<br />

Wir testen den iterativen Server nun <strong>mit</strong> dem in Abschnitt 5.1 entwickelten<br />

Clientprogramm. Als Serversystem kommt ein älterer IBM RS/6000 Server,<br />

Modell 270, <strong>mit</strong> zwei Power3-CPUs (je 375 MHz) <strong>und</strong> Betriebssystem AIX 5.3<br />

zum Einsatz. Der Test-Client läuft auf einem handelsüblichen PC <strong>mit</strong> Debian-<br />

Linux 3.1, der <strong>mit</strong> 3,0 GHz schnell genug ist, um den Server <strong>mit</strong> Anfragen zu<br />

sättigen. Die beiden Systeme befinden sich im selben Subnetz <strong>und</strong> sind über<br />

einen Switch <strong>mit</strong> 100 Mb/s <strong>mit</strong>einander verb<strong>und</strong>en. Die Gesamtlaufzeit des<br />

Clients wird <strong>mit</strong> dem <strong>Unix</strong>-Systemkommando time gemessen.<br />

Laufzeitmessungen<br />

In einem Testlauf stellt der Client insgsamt 30 Anfragen an den Server, wobei<br />

das Sieb des Eratosthenes Primzahlen bis zu einer Größe von maximal<br />

250 000 berechnen <strong>und</strong> der Server abschließend 500 kB an Daten zum Client<br />

transferieren muß. Die 30 Anfragen werden einmal sequentiell (1 Thread<br />

stellt nacheinander 30 Anfragen) <strong>und</strong> einmal nebenläufig (30 <strong>Threads</strong> stellen<br />

nebenläufig je eine Anfrage) an den Server gestellt.<br />

Tabelle 5.1. Laufzeitmessungen für den iterativen Server<br />

Laufzeit Client CPU-Zeit Server<br />

30 Anfragen, sequentiell 10,84 s 910 Clockticks<br />

30 Anfragen, nebenläufig 10,54 s 909 Clockticks<br />

Die in Tabelle 5.1 zusammengestellten Laufzeitmessungen zeigen, daß serverseitig<br />

in beiden Fällen die gleiche CPU-Zeit zur Beantwortung der Client-<br />

Anfrage benötigt wurde. Dies ist nicht weiter überraschend, da der Server die<br />

30 Anfragen in jedem Fall, d. h. insbesondere unabhängig vom Client, sequentiell<br />

beantwortet. Aus Sicht des Clients ist die Gesamtlaufzeit des nebenläufigen<br />

Clients dabei nur geringfügig kürzer als die des sequentiellen Clients. Der<br />

iterative Server kann offensichtlich keinen Vorteil aus dem vorhandenen zweiten<br />

Prozessor schlagen. Der marginale Zeitvorteil läßt sich folgendermaßen<br />

begründen: Stellt der Client nacheinander 30 einzelne Anfragen, ergibt sich

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!