Ceci est tiré du livre NodeJS en termes simples
Pourquoi dit-on que le temps asynchrone dépend du fichier le plus lent ? Même s'il est asynchrone, n'est-il pas monothread ? fichier ? Cela ne signifie-t-il pas que les deux codes sont exécutés en même temps ?
Il existe également un seul thread js. Le code js de base que vous écrivez est un seul thread. Une fois qu'il s'agit d'E/S réseau ou de fichier de base, il entrera dans la boucle d'événements et effectuera des opérations simultanées. . . 1234 a commencé au même moment. Personne n'attend personne.
Réalisés simultanément sans interférer les uns avec les autres.
La couche inférieure des tâches asynchrones node.js est implémentée par multi-threading. Pour une tâche asynchrone, le nœud maintient un pool de threads. Une tâche asynchrone retire un thread du pool de threads pour être exécuté. le pool de discussions
Simultané et synchronisé sont deux choses différentes ! La synchronisation fait référence à l'ordre dans lequel les choses sont exécutées ! Les seconds doivent s’appuyer sur les résultats des premiers ! L'asynchrone est effectué en même temps, mais la connexion entre les choses a peu d'impact sur l'ensemble du processus ! Par exemple, si vous effectuez plusieurs requêtes ajax en même temps, votre objectif est simplement de demander les données et d'afficher qu'il n'y a aucune corrélation entre les données. Utilisons une analogie ! C'est comme construire une route ! Posez d'abord l'asphalte, puis peignez les lignes ! Sinon, vous gâcherez la route pavée en traçant des lignes tout en la pavant ! A ce moment, ce sera le bordel s'il faut que ce soit synchrone et asynchrone ! Cependant, le marquage des lignes, le nettoyage des routes et l'installation des clôtures routières peuvent être effectués en même temps. Ceci est appelé asynchrone et n'affectera pas les résultats, mais cela sera également plus lent car l'installation des clôtures est plus complexe que les autres opérations. au final, tout le processus était terminé ! En revanche, si vous traitez ces trois dernières simultanément, le temps d'attente sera encore plus long car il faudra attendre que l'étape précédente soit traitée avant de traiter l'étape suivante ! Mais dans le passé, 10 personnes construisaient des routes. Comme il y avait trois choses à gérer dans la phase ultérieure, si nous voulions réaliser une mise en œuvre asynchrone, nous devions augmenter le nombre de personnes à 30. C'était comme si nous augmentions le coût des ordinateurs. (pas très professionnel ici), mais il y a souvent des ressources informatiques en excès. On peut ainsi faire bon usage des ressources informatiques asynchrones !
Un programme peut utiliser plusieurs cœurs de processeur pour exécuter plusieurs tâches en parallèle en même temps. La couche inférieure est soit multithread, soit multi-processus.
.La couche inférieure de Node est libuv.
Pour la lecture et l'écriture réseau (E/S), libuv utilise le mécanisme epoll fourni par le noyau sous Linux. La couche inférieure d'epoll du noyau Linux doit être implémentée à l'aide de threads du noyau, mais pas l'implémentation de la couche inférieure d'epoll. il faut que libuv s'en soucie. libuv appelle juste.
Pour la lecture et l'écriture de fichiers (E/S), libuv peut utiliser Linux AIO, ou utiliser le multi-threading pour l'implémenter, car le mécanisme de lecture et d'écriture de fichiers asynchrones AIO fourni par le noyau Linux sert principalement la base de données. , comme MySQL, qui s'appuie sur libaio.so. Le noyau AIO actuel ne prend en charge que le mode O_DIRECT (DirectIO) pour lire et écrire sur le disque, cela signifie que le programme ne peut pas utiliser le cache de page du système et nécessite la taille et la taille. le décalage de la lecture et de l'écriture est en blocs. Cela peut convenir pour la lecture et l'écriture de gros fichiers, mais ne convient pas aux petits fichiers. Libuv doit donc utiliser le multithread en bas pour implémenter la lecture et l'écriture de fichiers asynchrones.
Qu'il s'agisse de lecture et d'écriture réseau ou de lecture et d'écriture de fichiers, le programme revient toujours lorsqu'il revient, il doit revenir une fois toutes les tâches terminées, donc la tâche qui prend du temps est généralement la tâche qui prend le plus de temps. lire et écrire. Cependant, la lecture et l'écriture des fichiers peuvent être limitées par les IOPS du disque, ce qui entraînera inévitablement un blocage. Dans ce cas, la consommation globale de temps peut être plus longue.
.Lorsque Node est utilisé pour la programmation serveur ou la programmation serveur de niveau intermédiaire, la lecture et l'écriture réseau se produisent principalement.