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.4 Nebenläufige Server <strong>mit</strong> Prethreading 279<br />

112 close( sd ); /* passiven Socket schließen */<br />

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

114 exit( EXIT_FAILURE );<br />

115 }<br />

116 pthread_detach( tid );<br />

117 }<br />

118<br />

119 sigcatcher(); /* Der Hauptthread behandelt die Signale */<br />

120<br />

121 /* Falls der Prozeß durch SIGTERM beendet wird */<br />

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

123<br />

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

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

126 }<br />

96–117<br />

119<br />

121–126<br />

Als nächstes wird die geforderte Anzahl an Accept-Handlern als eigenständige<br />

<strong>Threads</strong> gestartet. Der Startroutine accept_handler() wird jeweils als<br />

einziges Argument der Socketdeskriptor des horchenden Serversockets sd<br />

übergeben. Die <strong>Threads</strong> der Accept-Handler werden allesamt sofort <strong>mit</strong><br />

pthread_detach() entkoppelt. Sofern nicht die geforderte Anzahl an neuen<br />

<strong>Threads</strong> gestartet werden kann, beendet sich der Dæmon <strong>mit</strong> einer entsprechenden<br />

Fehlermeldung.<br />

Im Anschluß widmet sich der Hauptthread ausschließlich dem Warten auf das<br />

SIGTERM-Signal.<br />

Sobald das SIGTERM-Signal eingetroffen ist, kehrt der Thread aus der Signalbehandlungsfunktion<br />

sigcatcher() zurück, gibt die verbrauchte CPU-Zeit<br />

aus <strong>und</strong> löscht die PID-Datei. Danach beendet sich Dæmon selbst.<br />

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

Ereneut untersuchen wir die Eigenschaften der aktuellen Server-Variante <strong>mit</strong><br />

Hilfe der aus Abschnitt 5.2.4 bekannten Testumgebung <strong>und</strong> vergleichen dabei<br />

die Messungen für 30 sequentielle <strong>und</strong> 30 parallele Anfragen <strong>mit</strong> den bisher<br />

erzielten Meßergebnissen.<br />

Laufzeitmessungen<br />

Wie aus Tabelle 5.3 ersichtlich ist, muß auch der Prethreading-Server offensichtlich<br />

in beiden Fällen mehr CPU-Zeit aufbringen als sein iterativer Kollege.<br />

Der Mehraufwand fällt aber sowohl für die sequentielle Folge von Anfragen<br />

als auch für die parallel eintreffenden Anfragen geringer aus als es noch beim<br />

threadbasierten Server aus Abschnitt 5.3 der Fall war. Für diesen Effekt lassen<br />

sich die folgenden beiden Gründe ausmachen:

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!