Raisons d'utiliser des API asynchrones
La raison pour laquelle le concept d'Asynchrone est devenu populaire dans Web2.0 est que JavaScript est exécuté sur un seul fil dans le navigateur, et il utilise également un fil avec rendu d'interface utilisateur. Cela signifie que l'interface utilisateur et les réponses sont dans un état stagnant lorsque JavaScript est exécuté. Pour une meilleure expérience utilisateur, une approche asynchrone (bien sûr, c'est dans le langage soi-disant unique) ne bloque pas le thread principal et continue de répondre aux opérations utilisateur. Cela appartient à la catégorie de l'expérience utilisateur.
De même, si les ingénieurs ayant une expérience dans d'autres langues comprennent bien sûr que la commutation de processeur entre les threads nécessite beaucoup de temps (principalement la commutation entre les contextes et la mise en cache), l'amélioration de l'efficacité est également une raison d'utiliser des API asynchrones.
Bien sûr, ceux-ci ne sont pas absolument corrects, mais tout le monde le dit. Parce que si la surcharge de la création de multithreads est inférieure à l'exécution parallèle, la méthode de la lecture multithre est le premier choix, qui est souvent considéré comme une tâche de traitement à forte intensité de processeur.
En bref, l'API ASYnchrones ou asynchrone peut être considérée comme la caractéristique du nœud, car il s'agit d'une plate-forme qui applique une IO asynchrone sur la couche d'application à grande échelle, et il s'efforce d'allouer des ressources plus efficacement sur un seul thread.
À propos de la promesse
Ici, cet article n'a pas l'intention d'expliquer en détail l'utilisation de la promesse, mais explique seulement brièvement certaines des API et la portée de la promesse:
// combinant la fonction Nodejs 'Fs.Readdir pour créer une promesse promessetasque native = nouvelle promesse (fonction (résoudre, rejeter) {fs.readdir (' / var / www ', function (err, fichiers) {if (! Err) {Resolve (fichiers);} else {rejeter (err);}});}); promeTask.theren (FORIEM Console.log ('Contenu est:' + fichiers); promisTask.catch (fonction (err) {console.log ('L'erreur est rapportée comme:' + err);});Comment attendre plusieurs promesses pour terminer?
// Connectez le promisseTask ci-dessus. Promesse.all (readFilSepromiselist);}). Puis (fonction (fileStraRay) {console.log ('lecture dite de fichier terminée:' + filestraRay);});Ce code montre l'élégance du développement de NodeJS.
Alors, quel est le problème?
Le langage le plus élégant à l'heure actuelle repose toujours sur le système d'exploitation, c'est-à-dire que les limitations du système existent toujours:
Je ne sais pas si cette erreur peut être interprétée comme des poignées de fonctionnement de fichiers épuisées, mais j'espère que vous pourrez comprendre cet article que le système d'exploitation ne peut pas ouvrir plusieurs fichiers illimités en même temps.
Et ceci:
C'est facile à comprendre et la mémoire est épuisée. Bien sûr, la limite de mémoire peut être ajustée en ajoutant les deux paramètres de course suivants:
nœud --max-old-space-size = 8192 ./index.js #Unit MB Node --max-new-space-Size = 2048 ./index.js #Unit kb
Les paramètres ci-dessus prennent effet lorsque le V8 est initialisé et ne peut pas être modifié dynamiquement une fois qu'ils prennent effet.
Beaucoup de gens peuvent proposer que ces deux limitations existent également dans d'autres langues. Oui, d'autres langues existent également.
Cependant, des modèles de programmation GC ou multithreads puissants dans d'autres langues peuvent permettre aux ingénieurs de les libérer à temps après avoir postulé pour les ressources système.
Bien que les ressources système inutiles puissent être publiées manuellement dans NodeJS, chaque opération du programme de référence peut-elle être publiée dans le temps?
Par exemple, le package NodeJS Redis (NPM Install Redis) ne fournit pas de méthodes d'opération de synchronisation.
Cela signifie qu'un contrôle davantage de processus est nécessaire dans le processus de développement. Malheureusement, les NodeJ dans un système unique ne sont pas bons dans ce domaine, car il n'y a pas de concept de multi-threading, pas de mécanisme de verrouillage, et il est impossible d'inclure des mécanismes de sémaphore au sens habituel. Le résultat est que les ingénieurs ne savent pas quand libérer manuellement les ressources.
À moins que vous ayez un contrôle absolu sur votre projet, vous n'utilisez aucun package tiers qui utilise des API asynchrones.
Par conséquent, la conclusion actuelle est que la promesse n'est qu'une technique de développement. La compréhension ne convient pas à tous les scénarios de développement.
Résumer
Ce qui précède concerne l'API asynchrone Node.js et ses limites. J'espère que cet article sera utile à tout le monde. Si vous avez des questions, veuillez laisser un message pour communiquer.