Maison >Opération et maintenance >Nginx >Pourquoi nginx est-il si rapide ?
La raison principale est que Nginx utilise le dernier modèle d'E/S réseau epoll (noyau Linux 2.6) et kqueue (freebsd).
epoll est une méthode de multiplexage des E/S (I/O Multiplexing), mais elle n'est utilisée que pour les noyaux Linux 2.6 et supérieurs. Avant de commencer à discuter de ce problème, expliquons pourquoi le multiplexage des E/S est requis. .
Expliquons-le avec un exemple dans la vie
Supposons que vous étudiez à l'université et que vous deviez attendre la visite d'un ami, et que cet ami sait seulement que vous êtes dans le bâtiment numéro A. , mais je ne sais pas où vous habitez précisément, vous avez donc pris rendez-vous à la porte du bâtiment A.
Si vous utilisez le modèle IO bloquant pour résoudre ce problème, alors vous ne pouvez qu'attendre au bâtiment A tout le temps. En attendant que vos amis arrivent à la porte du bâtiment, vous ne pouvez rien faire d'autre. Il n'est pas difficile de savoir que l'efficacité de cette méthode est faible. > Aujourd'hui, les temps ont changé et le multiplexage a commencé à être utilisé. Le modèle IO est utilisé pour résoudre ce problème. Vous dites à votre ami de venir au bâtiment A et demandez au gestionnaire du bâtiment de vous indiquer comment y aller. le rôle des IO multiplexés
Expliquez plus en détail la différence entre les modèles select et epoll
Ce que fait la tante de la version select est la suivante : Par exemple, lorsque l'ami du camarade de classe A arrive, le select. la version tante est stupide, et elle emmène ses amis de pièce en pièce pour vérifier qui est qui. C'est le camarade de classe A. L'ami que vous attendiez est là, donc dans le code actuel, la version tante sélectionnée fait ce qui suit :
Dans epoll, la structure de données clé epoll_event est définie comme suit :
; , epoll_data est une structure d'union, qui est la structure utilisée par la version epoll de tante pour enregistrer les informations sur les camarades de classe. Elle peut enregistrer de nombreux types d'informations : fd, pointeurs, etc. Avec cette structure, epoll tante peut les localiser sans aucun effort. Au camarade de classe A.
Ne sous-estimez pas ces améliorations d'efficacité. Dans un serveur simultané à grande échelle, l'interrogation des entrées/sorties est l'une des opérations les plus chronophages. Pour en revenir à l'exemple, si à chaque fois la construction d'un ami. Le directeur veut interroger ses camarades de classe dans tout le bâtiment, donc l'efficacité du traitement sera inévitablement faible. Bientôt, il y aura beaucoup de monde sur le sol
Comparez le premier modèle de traitement des E/S bloquantes, on peut voir que. après avoir utilisé les E/S multiplexées, le programme peut effectuer librement son propre travail, à l'exception des opérations d'E/S. Ce n'est que lorsque l'état d'E/S change que les E/S multiplexées le notifieront, puis effectueront les opérations correspondantes, au lieu d'avoir à bloquer et à attendre que l'état d'E/S change. .
De l'analyse ci-dessus, on peut également voir que l'amélioration d'epoll par rapport à select est en fait une application spécifique de l'idée d'échanger de l'espace contre du temps.
Pour plus d'articles techniques liés à Nginx, veuillez visiter la colonne Tutoriel Nginx pour apprendre !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!