GNU/Linux >> Tutoriels Linux >  >> Linux

Confusion à propos du mécanisme d'E/S asynchrone interne de node.js

  1. Tout d'abord, libuv a supprimé le libeio à partir de cela. Mais il effectue des E/S de fichiers asynchrones avec un pool de threads comme libeio comme vous l'avez mentionné.

  2. libuv supprime également libev . Il effectue les E/S réseau asynchrones en fonction des interfaces d'E/S asynchrones dans différentes plates-formes, telles que epoll , kqueue et IOCP , sans pool de threads. Il y a une boucle d'événement qui s'exécute sur le thread principal de uv qui interroge les événements d'E/S et les traite.

  3. Le pool de threads à l'intérieur de libuv est un pool de threads de taille fixe (4 dans un système de type uinx). Il joue un rôle de file d'attente de tâches et évite l'épuisement des ressources système en générant indéfiniment des threads lorsque les requêtes augmentent.


Jusqu'à la version 0.6, le nœud utilisait libev pour exécuter la boucle d'événement et libeio pour les E/S asynchrones (le backend Unix repose fortement sur ces deux bibliothèques). Mais libuv a commencé à remplacer libev et libeio dans la version 0.8. Il exécute, maintient et gère tous les io et les événements du pool d'événements. libuv est le choix dans les bibliothèques d'E/S asynchrones multiplateformes.

  1. Oui, jusqu'au nœud 0.6, obsolète dans la version 0.8 et utilise le pool de threads
  2. Oui, mais libev n'utilise pas de pool de threads. Voir ici

    Clarification :D'après le lien dans la question que j'ai posté, libeio prend en charge toutes les fonctions POSIX traitant des E/S (ce qui inclut socket). Mais l'auteur du nœud a décidé de l'utiliser uniquement pour les E/S de fichiers asynchrones et utilise libev pour les E/S réseau. Je ne sais pas d'où vous l'avez entendu, mais vous pouvez utiliser epoll sur des fichiers normaux.

  3. libev utilise une boucle d'événements donc pas de problèmes ici.

  4. Oui, IOCP gère les E/S asynchrones dans Windows, le noyau utilise des pools de threads.
  5. Le nouveau noyau Linux a epoll, kqueue dans le nouveau noyau BSD. libev et libeio étaient pour l'environnement Linux et fournissent une boucle d'événement/E/S asynchrones pour tous les noyaux (prend en charge select, poll, epoll, kqueue).

Mettre à jour les questions :

  1. je ne sais pas grand-chose sur libuv
  2. peut-être assez (je ne sais pas)
  3. Voici mes découvertes sur Windows 8, vérifiées via Process Explorer. A montré 4 fils, 1 DLL, 1 fichier et 1 section (7 entrées au total) pour un processus d'application de nœud.

  4. ps -eLf affiche tous les threads et processus, peut-être que vous le filtrez trop, recherchez simplement le pid de processus de nœud comme ps -eLf | grep x où x est le pid du processus de nœud.


Linux
  1. Rapports d'E/S à partir de la ligne de commande Linux

  2. Conflits Node.js :/sbin/node Vs /usr/bin/node ?

  3. Configurer les lecteurs flash dans les instances d'E/S élevées en tant que lecteurs de données

  4. Considérations relatives à la migration vers un serveur cloud à usage général ou d'E/S

  5. Linux et ports de complétion d'E/S ?

10 Commande Linux iostat pour rapporter les statistiques du CPU et des E/S

10 exemples iozone pour la mesure des performances d'E/S de disque sous Linux

Comment faire des E/S de console non bloquantes sous Linux en C ?

Comment arrêter le processus "sans interruption" sous Linux ?

Comment purger les caches d'E/S disque sous Linux ?

Comment vérifier l'utilisation des E/S disque par processus ?