Le serveur qui écoute sur le port 80 N'A PAS à gérer plusieurs processus. Les démons TCP simples des années plus âgées ne pouvaient gérer qu'une seule connexion à la fois. Vous pouvez émuler ce comportement en ayant un programme tel netcat
qu'écouter sur un port spécifique et essayer d'y connecter deux machines. L'un entrera, l'autre rebondira sans connexion. Ces démons sont pour la plupart inutiles, vous ne les voyez donc plus.
Pour quelque chose comme un serveur Web, il écoute directement sur le port. La chose à garder à l'esprit est qu'elle se trouve au-dessus de la bibliothèque de sockets du système d'exploitation. Lorsqu'une nouvelle connexion est établie, la bibliothèque de sockets transmet le tout nouveau socket au logiciel du serveur Web. À ce stade, le logiciel du serveur Web a quelques options.
Une possibilité est qu'il passe l'objet socket à un nouveau thread dans le même processus. Chaque fois qu'une communication se produit sur ce socket, ce thread la gérera. Le processus parent assure la médiation des threads actifs à un moment donné, ce qui peut être beaucoup.
Une autre possibilité est qu'il entraîne un nouveau processus et passe l'objet socket au processus. Si je comprends bien, c'est maintenant au système de socket du système d'exploitation d'intervenir sur la communication entre ces processus enfants et leurs cibles. Le processus parent a toujours un certain contrôle sur les processus, tels que la suppression des processus bloqués et d'autres communications inter-processus.
Laquelle de ces approches est la plus efficace dépend du système d'exploitation. IIRC, Apache peut fonctionner dans les deux modes.
En substance, la bibliothèque de sockets fournit un niveau de traitement parallèle au serveur Web. Il peut gérer plusieurs connexions simultanées en transférant activement des données, tout en acceptant de nouvelles connexions.
Pour un navigateur qui peut lancer plusieurs tentatives de connexion à un serveur Web afin d'améliorer les temps de chargement, le parallélisme s'applique également du côté du navigateur, c'est une bonne et merveilleuse chose. Le navigateur garde une trace de l'état de la page pendant son chargement, et les multiples tentatives de connexion qu'il fait tourner font toutes partie du processus.
recv()
dans chaque processus.