Maison  >  Article  >  interface Web  >  Explication détaillée du blocage et du non-blocage dans Nodejs

Explication détaillée du blocage et du non-blocage dans Nodejs

青灯夜游
青灯夜游avant
2021-05-18 10:23:322271parcourir

Cet article vous aidera à comprendre le blocage et le non-blocage dans Nodejs. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Explication détaillée du blocage et du non-blocage dans Nodejs

Étude recommandée : "tutoriel nodejs"

Tout le monde devrait avoir quelques idées sur les deux concepts de blocage et de non-blocage Compréhension :

Pour faire simple, le blocage est principalement causé par le mode synchrone. Le non-blocage peut être compris comme le mode asynchrone traitant certaines opérations chronophages

Parlons ensuite du blocage et du non-blocage. dans Node.js Comment le blocage est-il décrit ? Ce qui suit explique principalement ce problème :

Qu'est-ce que le blocage dans Node ?

Les opérations d'E/S peuvent être comprises comme faisant principalement référence à l'interaction avec le disque système (lecture et écriture de données) ou aux requêtes réseau, etc.

Le blocage est l'exécution d'un autre code JS Vous devez attendre que le précédent I/O操作 fastidieux ou que certaines requêtes réseau soient terminées. Étant donné que Node dispose d'une boucle d'événements pour résoudre ce problème, si la boucle d'événements n'est pas activée pendant l'exécution de js, cela provoquera en fait un blocage.

En fait, dans des circonstances normales, Node.js est bloqué. La raison en est que le traitement asynchrone de Node est plus convivial pour les opérations d'E/S [en utilisant des boucles d'événements], mais pour certains processeurs qui peuvent exister en JavaScript Intensive. les performances de fonctionnement sont relativement faibles. Certains étudiants peuvent se demander pourquoi Node.js ne peut-il pas prendre en charge les opérations gourmandes en CPU de manière asynchrone ? Car on peut comprendre que ces opérations gourmandes en CPU sont en fait des codes synchrones, comme un grand nombre de boucles for, des calculs de données massifs, etc.

Il existe également certaines méthodes de synchronisation dans la bibliothèque standard de Node.js. La plupart de ces méthodes sont basées sur libuv pour obtenir des effets de blocage. Il existe également des méthodes de blocage dans les modules natifs de Node. Cependant, Node fournira également une version asynchrone correspondante de l'API.

Et libuv ? Il s'agit d'une bibliothèque pour les opérations d'E/S asynchrones qui prend en charge plusieurs plates-formes. Pour plus de détails, veuillez consulter le site officiel : https://libuv.org/

Qu'est-ce que le non-blocage dans Node ?

Tout d'abord, réfléchissez à comment parvenir au non bloquant (asynchrone) dans un contexte qui ne se limite pas à Node ?

Pour faire simple :

1) Plusieurs threads peuvent être ouverts pour gérer des opérations simultanées

2) Mode boucle d'événements, s'il y a des opérations asynchrones placées dans la file d'attente des événements , une fois l'opération asynchrone terminée, appelez la fonction de rappel correspondante pour traiter le résultat de retour asynchrone

Node.js est monothread La raison est la suivante : la couche externe de Node.js est implémentée par JavaScript et le. l'interprétation et l'exécution de JavaScript se font via V8引擎 Made it.

Étant donné que l'exécution de JS est monothread, il nous est impossible d'ouvrir un autre thread pour l'interprétation et l'exécution pendant l'interprétation et l'exécution de JS. Par conséquent, Node.js adopte la deuxième méthode pour obtenir un non-blocage (. fonctionnement asynchrone) )de.

Attention à ne pas mélanger les API bloquantes et non bloquantes dans Node

Adresse originale en anglais : https://nodejs.org/en/docs/ guides/ blocking-vs-non-blocking/

Pour plus de connaissances sur la programmation, veuillez visiter : Vidéo de programmation ! !

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer