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.

117 exit( EXIT_FAILURE );<br />

118 }<br />

5.5 Nebenläufige Server <strong>mit</strong> mehreren Prozessen 287<br />

119<br />

120 /* Prozeß in einen Daemon umwandeln */<br />

121 daemon_init( argv[0], PIDFILE , LOG_DAEMON );<br />

122<br />

123 init_srv_stats(); /* CPU-Statistik initialisieren */<br />

124<br />

125 accept_handler( sd ); /* Accept -Handler aufrufen */<br />

126<br />

127 /* Falls die Schleife durch SIGTERM beendet wurde */<br />

128 print_srv_stats(); /* CPU-Statistik ausgeben */<br />

129<br />

130 unlink( PIDFILE ); /* PID-Datei entfernen */<br />

131 exit( EXIT_SUCCESS ); /* Daemon beenden */<br />

132 }<br />

120–125<br />

Bevor der Aufruf des Accept-Handlers die Verarbeitung der eingehenden Netzwerkverbindungen<br />

startet, werden noch die CPU-Statistiken initialisiert <strong>und</strong><br />

der Serverprozeß wird in einen Dæmonprozeß umgewandelt.<br />

Sobald dem Prozeß ein SIGTERM zugestellt wurde, hat daemon_exit den<br />

Wert 1 <strong>und</strong> die accept_handler()-Funktion kehrt folglich zurück. Das Hauptprogramm<br />

gibt dann die verbrauchte CPU-Zeit aus, löscht die PID-Datei <strong>und</strong><br />

beendet den Dæmon schließlich.<br />

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

Natürlich wollen wir auch den prozeßbasierten nebenläufigen Server in der<br />

schon gewohnten Testumgebung (vgl. Abschnitt 5.2.4) untersuchen. Wieder<br />

strapazieren wir den Server dazu <strong>mit</strong> 30 sequentiellen <strong>und</strong> 30 parallelen Anfragen<br />

<strong>und</strong> vergleichen die Messungen <strong>mit</strong> den bisher erzielten Meßergebnissen.<br />

Laufzeitmessungen<br />

Im direkten Vergleich <strong>mit</strong> der threadbasierten Variante aus Abschnitt 5.3 gibt<br />

sich die Version <strong>mit</strong> mehreren Prozessen nur geringfügig behäbiger. Auch hier<br />

zeigt sich jedoch, daß im Falle vieler gleichzeitiger Anfragen der Mehraufwand<br />

gegenüber dem iterativen Server deutlich ansteigt. Mit einem CPU-Aufwand<br />

von 1157 Clockticks liegt der Mehrprozeß-Server bei 30 parallelen Anfragen<br />

immerhin um r<strong>und</strong> 27% über dem Meßergebnis für den iterativen Server. Hier<br />

macht sich der deutlich erhöhte Scheduling-Aufwand für 30 Prozesse bei nur<br />

zwei Prozessoren bemerkbar.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!