Der an Port 80 empfangende Server MUSS nicht mehrere Prozesse abwickeln. Einfache TCP-Daemons älterer Jahre konnten jeweils nur eine Verbindung verarbeiten. Sie können dieses Verhalten emulieren, indem Sie ein Programm wie das netcat
Abhören eines bestimmten Ports veranlassen und versuchen, zwei Computer damit zu verbinden. Einer steigt ein, der andere springt ohne Verbindung ab. Diese Dämonen sind größtenteils nutzlos, sodass Sie sie nie mehr sehen.
Bei so etwas wie einem Webserver wird der Port direkt abgehört. Beachten Sie, dass es sich über der Socket-Bibliothek des Betriebssystems befindet. Wenn eine neue Verbindung hergestellt wird, übergibt die Socket-Bibliothek den brandneuen Socket an die Webserver-Software. Zu diesem Zeitpunkt verfügt die Webserver-Software über einige Optionen.
Eine Möglichkeit besteht darin, dass das Socket-Objekt im selben Prozess an einen neuen Thread übergeben wird. Wann immer Kommunikation über diesen Socket stattfindet, wird dieser Thread damit umgehen. Der übergeordnete Prozess vermittelt, welche Threads zu einem bestimmten Zeitpunkt aktiv sind, was eine Menge sein kann.
Eine andere Möglichkeit besteht darin, dass ein neuer Prozess gestartet und das Socket-Objekt an den Prozess übergeben wird. Soweit ich weiß, liegt es nun am Socket-System des Betriebssystems, die Kommunikation zwischen diesen untergeordneten Prozessen und ihren Zielen zu vermitteln. Der übergeordnete Prozess hat immer noch eine gewisse Kontrolle über die Prozesse, z. B. das Beenden von blockierten Prozessen und andere prozessübergreifende Kommunikationen.
Welcher dieser Ansätze effizienter ist, hängt vom Betriebssystem ab. IIRC, Apache kann in beiden Modi ausgeführt werden.
Im Wesentlichen bietet die Socket-Bibliothek eine parallele Verarbeitungsebene für den Webserver. Es kann mehrere gleichzeitige Verbindungen verarbeiten, die aktiv Daten übertragen, und gleichzeitig neue Verbindungen akzeptieren.
Für einen Browser, der mehrere Verbindungsversuche zu einem Webserver ausführen kann, um die Ladezeiten zu verbessern, gilt Parallelität auch auf der Browserseite. Dies ist eine gute und wunderbare Sache. Der Browser verfolgt den Status der Seite beim Laden, und die mehrfachen Verbindungsversuche, die er startet, sind alle Teil des Prozesses.
recv()
bei jedem Vorgang.