Table des matières
E/S asynchrones non bloquantes idéales (nœuds)
E/S asynchrones réelles
Simulation multithread d'E/S asynchrones
Maison interface Web js tutoriel Parlons des différents modèles d'E/S dans Node

Parlons des différents modèles d'E/S dans Node

Feb 07, 2022 pm 05:56 PM
node

Cet article parlera des différents modèles d'E/S dans Node et présentera le modèle d'E/S bloquantes, le modèle d'E/S non bloquantes et les E/S asynchrones non bloquantes. J'espère qu'il sera utile à tout le monde. .

Parlons des différents modèles d'E/S dans Node

Prenons l'exemple d'une requête réseau IO. Tout d'abord, nous introduisons le processus typique du serveur traitant une requête réseau complète :

Parlons des différents modèles dE/S dans Node

L'application obtient un résultat d'opération, qui comprend généralement deux étapes différentes :

  • En attente que les données soient prêtes

  • Copier les données du noyau vers le processus

Ci-dessous, nous prenons la fonction recvfrom comme exemple pour expliquer les différents modèles d'E/S

Blocage E/S modèle (blocage des E/S)

Appel bloquant signifie que le thread actuel sera suspendu avant que le résultat de l'appel ne soit renvoyé, et le thread appelant ne se terminera qu'après avoir attendu que toutes les opérations au niveau du noyau du système soient terminées .

Le blocage des E/S oblige le CPU à attendre les E/S et gaspille des tranches de temps CPU.

Parlons des différents modèles dE/S dans Node

Modèle d'E/S non bloquantes (E/S non bloquantes)

Par rapport à l'ancien,

E/S non bloquantesretourne directement sans données Pour obtenir des données, vous devez également passer un. descripteur de fichier Après avoir essayé de lire à nouveau les données

Parlons des différents modèles dE/S dans Node

appel non bloquant

et d'avoir obtenu le retour (et non les données réellement attendues), la tranche de temps CPU peut être utilisée pour traiter d'autres choses, ce qui peut améliorer considérablement les performances. Mais le problème qui en découle est que l'opération précédente n'était pas une E/S complète et que le résultat renvoyé n'était pas les données métier attendues, mais uniquement l'état de l'appel asynchrone.

Afin d'obtenir des données complètes, l'application doit appeler à plusieurs reprises l'opération IO pour confirmer si l'opération est terminée. Cette opération est appelée

polling

Plusieurs stratégies d'interrogation courantes sont les suivantes

Busy polling

. Il s'agit de la méthode la plus primitive et la moins performante. Elle vérifie l'état des E/S via des appels répétés pour obtenir des données complètes.

Parlons des différents modèles dE/S dans NodeAvantages : Programmation simple

Inconvénients : Le processeur est toujours consommé lors de l'interrogation. performances, car le serveur doit toujours répondre après votre interrogation

Modèle de multiplexage d'E/S (multiplexage d'E/S)

Parlons des différents modèles dE/S dans NodeDans le modèle de multiplexage d'E/S, fonction Select ou Poll ou fonction Epoll (prise en charge par le noyau Linux après 2.6), ces deux fonctions bloqueront également le processus, mais elles sont différentes du blocage des E/S.

Ces trois fonctions peuvent bloquer plusieurs opérations d'E/S en même temps et peuvent détecter les fonctions d'E/S de plusieurs opérations de lecture et de plusieurs opérations d'écriture en même temps. Elles ne sont réellement appelées que lorsque les données sont lisibles ou inscriptibles. Fonctions d'opération d'E/S.

Les différences entre les trois mécanismes de multiplexage d'E/S sont les suivantes

  • select

  • Étant donné que select utilise un tableau de 1024 longueurs pour stocker l'état des fichiers, jusqu'à 1024 descripteurs de fichiers peuvent être détectés en même temps. time

  • poll

  • est légèrement améliorée par rapport à select L'utilisation de la liste chaînée évite la limite de longueur de 1024 et évite les contrôles de parcours inutiles Par rapport à select, les performances sont légèrement améliorées

  • . epoll/kqueue

  • est le mécanisme de notification d'événement d'E/S le plus efficace sous Linux. Si aucun événement d'E/S n'est détecté pendant l'interrogation, il
se mettra en veille

jusqu'à ce qu'un événement se produise et que le thread se réveille. Il profite vraiment des notifications d'événements et exécute des rappels au lieu de parcourir des requêtes (descripteur de fichier), donc il ne gaspille pas de CPU

Parlons des différents modèles dE/S dans NodeRésumé : Essentiellement,

l'interrogation est toujours une opération synchrone

, car l'application Le programme est toujours en attendant le retour complet de l'E/S. Pendant la période d'attente, soit il traverse l'état de description du fichier, soit il se met en veille pour attendre que l'événement se produise.

Modèle d'E/S piloté par signal (E/S piloté par signal)

Parlons des différents modèles dE/S dans NodeDans le modèle d'E/S piloté par signal, l'application utilise des signaux pour piloter les E/S et installe une fonction de traitement du signal. Le processus continue de s'exécuter sans blocage.

Lorsque les données sont prêtes, le programme recevra un signal SIGIO et pourra appeler la fonction d'opération E/S dans la fonction de traitement du signal pour traiter les données.

Résumé : jusqu'à présent, le modèle d'E/S piloté par signal est plus conforme à nos besoins asynchrones. Le programme exécutera d'autres logiques métier de manière asynchrone en attendant les données.

Mais ! ! ! Il est toujours bloqué lors du processus de copie des données du noyau vers l'espace utilisateur, ce qui n'est pas une révolution complète (asynchrone).

E/S asynchrones non bloquantes idéales (nœuds)

Notre E/S asynchrone idéale devrait être un appel non bloquant lancé par l'application, sans qu'il soit nécessaire d'obtenir des données via une interrogation, et il n'est pas nécessaire de copier le données dans l'étape Au lieu d'attendre inutilement, une fois les E/S terminées, elles peuvent être transmises à l'application via une fonction de signal ou de rappel, pendant laquelle l'application peut exécuter une autre logique métier.

Parlons des différents modèles dE/S dans Node

E/S asynchrones réelles

En fait, la plate-forme Linux prend en charge nativement les E/S asynchrones (AIO), mais actuellement AIO n'est pas parfait, donc lors de la mise en œuvre d'une programmation réseau à haute concurrence sous Linux, c'est principalement moi /O modèle de réutilisation.

Les véritables E/S asynchrones sont implémentées sous Windows via IOCP.

Simulation multithread d'E/S asynchrones

Sous la plate-forme Linux, Node utilise le pool de threads pour terminer l'acquisition de données en laissant certains threads effectuer des E/S bloquantes ou des E/S non bloquantes + interrogation, de sorte que un seul thread effectue des calculs et transfère les résultats d'E/S via la communication entre les threads, réalisant ainsi la simulation d'E/S asynchrones.

En fait, la couche inférieure de la solution asynchrone et asynchrone IOCP sous la plateforme Windows est également implémentée à l'aide d'un pool de threads. La différence est que le pool de threads de cette dernière est hébergé par le noyau système.

Nous disons souvent que Node est monothread, mais en fait, on peut seulement dire que JS est exécuté dans un seul thread Qu'il s'agisse d'une plateforme *nix ou Windows, la couche inférieure utilise le pool de threads. pour terminer les opérations d’E/S.

Pour plus de connaissances sur les nœuds, veuillez visiter : tutoriel Nodejs !

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment utiliser Express pour gérer le téléchargement de fichiers dans un projet de nœud Comment utiliser Express pour gérer le téléchargement de fichiers dans un projet de nœud Mar 28, 2023 pm 07:28 PM

Comment gérer le téléchargement de fichiers ? L'article suivant vous expliquera comment utiliser Express pour gérer les téléchargements de fichiers dans le projet de nœud. J'espère qu'il vous sera utile !

Comment supprimer un nœud dans NVM Comment supprimer un nœud dans NVM Dec 29, 2022 am 10:07 AM

Comment supprimer un nœud avec nvm : 1. Téléchargez « nvm-setup.zip » et installez-le sur le lecteur C ; 2. Configurez les variables d'environnement et vérifiez le numéro de version via la commande « nvm -v » 3. Utilisez la commande « nvm » ; install" commande Installer le nœud ; 4. Supprimez le nœud installé via la commande "nvm uninstall".

Comment faire la mise en miroir Docker du service Node ? Explication détaillée de l'optimisation extrême Comment faire la mise en miroir Docker du service Node ? Explication détaillée de l'optimisation extrême Oct 19, 2022 pm 07:38 PM

Durant cette période, je développais un service HTML dynamique commun à toutes les catégories de documents Tencent. Afin de faciliter la génération et le déploiement des accès aux différentes catégories, et pour suivre la tendance de migration vers le cloud, j'ai envisagé d'utiliser Docker pour corriger. contenu du service et gérer les versions des produits de manière unifiée. Cet article partagera l'expérience d'optimisation que j'ai accumulée en train de servir Docker pour votre référence.

Une analyse approfondie de l'outil de gestion de processus de Node « pm2 » Une analyse approfondie de l'outil de gestion de processus de Node « pm2 » Apr 03, 2023 pm 06:02 PM

Cet article partagera avec vous l'outil de gestion de processus de Node "pm2" et expliquera pourquoi pm2 est nécessaire, comment installer et utiliser pm2, j'espère qu'il sera utile à tout le monde !

Enseignement du nœud PI: Qu'est-ce qu'un nœud PI? Comment installer et configurer le nœud PI? Enseignement du nœud PI: Qu'est-ce qu'un nœud PI? Comment installer et configurer le nœud PI? Mar 05, 2025 pm 05:57 PM

Explication détaillée et guide d'installation pour les nœuds de pignon Cet article introduira l'écosystème de pignon en détail - nœuds PI, un rôle clé dans l'écosystème de pignon et fournir des étapes complètes pour l'installation et la configuration. Après le lancement du réseau de test de la blockchain pèse, les nœuds PI sont devenus une partie importante de nombreux pionniers participant activement aux tests, se préparant à la prochaine version du réseau principal. Si vous ne connaissez pas encore Pinetwork, veuillez vous référer à ce qu'est Picoin? Quel est le prix de l'inscription? PI Utilisation, exploitation minière et sécurité. Qu'est-ce que Pinetwork? Le projet Pinetwork a commencé en 2019 et possède sa pièce exclusive de crypto-monnaie PI. Le projet vise à en créer un que tout le monde peut participer

Parlons de la façon d'utiliser pkg pour empaqueter des projets Node.js dans des fichiers exécutables. Parlons de la façon d'utiliser pkg pour empaqueter des projets Node.js dans des fichiers exécutables. Dec 02, 2022 pm 09:06 PM

Comment empaqueter le fichier exécutable nodejs avec pkg ? L'article suivant vous expliquera comment utiliser pkg pour empaqueter un projet Node dans un fichier exécutable. J'espère qu'il vous sera utile !

Que faire si le nœud npm gyp échoue Que faire si le nœud npm gyp échoue Dec 29, 2022 pm 02:42 PM

npm node gyp a échoué car les versions de « node-gyp.js » et « Node.js » ne correspondaient pas. La solution : 1. Videz le cache du nœud via « npm cache clean -f » 2. Via « npm install - ». g n" Installez le module n ; 3. Installez la version "node v12.21.0" via la commande "n v12.21.0".

Authentification basée sur des jetons avec Angular et Node Authentification basée sur des jetons avec Angular et Node Sep 01, 2023 pm 02:01 PM

L'authentification est l'une des parties les plus importantes de toute application Web. Ce didacticiel traite des systèmes d'authentification basés sur des jetons et de leurs différences par rapport aux systèmes de connexion traditionnels. À la fin de ce didacticiel, vous verrez une démo entièrement fonctionnelle écrite en Angular et Node.js. Systèmes d'authentification traditionnels Avant de passer aux systèmes d'authentification basés sur des jetons, examinons les systèmes d'authentification traditionnels. L'utilisateur fournit son nom d'utilisateur et son mot de passe dans le formulaire de connexion et clique sur Connexion. Après avoir effectué la demande, authentifiez l'utilisateur sur le backend en interrogeant la base de données. Si la demande est valide, une session est créée à l'aide des informations utilisateur obtenues à partir de la base de données et les informations de session sont renvoyées dans l'en-tête de réponse afin que l'ID de session soit stocké dans le navigateur. Donne accès aux applications soumises à

See all articles