web-dev-qa-db-fra.com

Comment Nginx gère-t-il les requêtes HTTP?

Je comprends que les threads sont utilisés par Apache: chaque connexion ouvre un thread et lorsque la réponse est envoyée, le thread est fermé, libérant les ressources pour les autres threads).

Mais je ne reçois pas la conception événementielle que Nginx utilise. J'ai lu quelques notions de base sur la conception événementielle .. mais je ne comprends pas comment cela est utilisé par nginx pour gérer les requêtes Web.

Où puis-je lire et comprendre comment Nginx gère les connexions de manière pilotée par les événements, je comprends pourquoi c'est mieux, plutôt que d'accepter simplement que la conception basée sur les événements est meilleure que la conception basée sur les threads.

58
never_had_a_name

Nginx utilise le modèle Reactor . Fondamentalement, il est monothread (mais peut bifurquer plusieurs processus pour utiliser plusieurs cœurs). La boucle d'événement principale attend que le système d'exploitation signale un événement de préparation - par exemple ces données sont disponibles pour être lues à partir d'un socket, moment auquel elles sont lues dans un tampon et traitées. Le thread unique peut servir très efficacement des dizaines de milliers de connexions simultanées (le modèle thread par connexion échouerait en raison de l'énorme surcharge de changement de contexte, ainsi que de la grande consommation de mémoire, car chaque thread a besoin de sa propre pile) .

54
Onestone