-
Tout d'abord,
libuv
a supprimé lelibeio
à partir de cela. Mais il effectue des E/S de fichiers asynchrones avec un pool de threads commelibeio
comme vous l'avez mentionné. -
libuv
supprime égalementlibev
. Il effectue les E/S réseau asynchrones en fonction des interfaces d'E/S asynchrones dans différentes plates-formes, telles queepoll
,kqueue
etIOCP
, sans pool de threads. Il y a une boucle d'événement qui s'exécute sur le thread principal deuv
qui interroge les événements d'E/S et les traite. -
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.
- Oui, jusqu'au nœud 0.6, obsolète dans la version 0.8 et utilise le pool de threads
-
Oui, mais
libev
n'utilise pas de pool de threads. Voir iciClarification :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 utiliselibev
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. -
libev
utilise une boucle d'événements donc pas de problèmes ici. - Oui, IOCP gère les E/S asynchrones dans Windows, le noyau utilise des pools de threads.
- Le nouveau noyau Linux a epoll, kqueue dans le nouveau noyau BSD.
libev
etlibeio
é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 :
- je ne sais pas grand-chose sur
libuv
- peut-être assez (je ne sais pas)
-
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.
-
ps -eLf
affiche tous les threads et processus, peut-être que vous le filtrez trop, recherchez simplement le pid de processus de nœud commeps -eLf | grep x
où x est le pid du processus de nœud.