Maison >interface Web >js tutoriel >Qu'est-ce que les E/S non bloquantes dans Node.js ? Comprenez avec des exemples !

Qu'est-ce que les E/S non bloquantes dans Node.js ? Comprenez avec des exemples !

青灯夜游
青灯夜游avant
2021-08-13 10:55:392374parcourir

Qu'est-ce que les E/S non bloquantes dans

Node.js ? Cet article utilise des exemples pour vous aider à comprendre les E/S non bloquantes dans Node.js. J'espère qu'il vous sera utile !

Qu'est-ce que les E/S non bloquantes dans Node.js ? Comprenez avec des exemples !

Écrit au front

Je voulais apprendre Node.js depuis longtemps. Je pense que le front-end doit comprendre les connaissances côté serveur et être capable de compléter de manière autonome un petit full-stack. Cependant, en raison de facteurs de temps, le semestre dernier, après avoir appris quelques bases, je n'ai plus le temps d'apprendre. Il se trouve que j'ai réussi le deuxième cours aujourd'hui, et je suis là pour vous tester à nouveau avec Node.js ! ! ! [Apprentissage recommandé : "tutoriel Nodejs"]

  • Les E/S sont des entrées/sorties. La différence entre l'entrée et la sortie d'un système
  • E/S bloquantes et les E/S non bloquantes est quela. Le système reçoit des entrées. Pendant la période de sortie, d'autres entrées peuvent-elles être reçues

Par exemple

  • Aller à la cantine pour manger : nous devons tous faire la queue pour manger

    Notre processus est : Faire la queue-- ---->Attendez Les gens devant nous cuisinent -------->C'est à notre tour de cuisiner nous-mêmes------->Commencer à manger

  • Manger au restaurant : commander nourriture au restaurant

    Maintenant, notre processus est le suivant : Asseyez-vous------->Commandez------->Attendez-------->Commencez à manger

    Essayez de commencez à utiliser des choses étranges dans le markdown

  • Faire la queue pour commander de la nourriture ou commander au restaurant

  • Pour ceux d'entre nous qui commandent du personnel :

    • Faire la queue pour manger bloque les E/S
    • Commande au restaurant est une E/S non bloquante

Continuez à regarder la phrase du haut :

Le système reçoit une entrée Pendant la période de sortie, peut-il recevoir d'autres entrées

Dans le marron, le système =. la tante qui cuisine à la cantine ou le serveur du restaurant, entrée = commander de la nourriture, sortie = servir de la nourriture (servir de la nourriture)

La tante de la cafétéria ne peut servir qu'un seul morceau de nourriture---------> /O

Le serveur peut également servir d'autres plats après avoir commandé Invité ------->E/S non bloquantes

En fait, notre institutrice nous a appris ce problème

Xiaofang aide sa mère faire le ménage. Elle doit faire : laver les vêtements dans la machine à laver (20 minutes), balayer le sol (10 minutes), ranger le bureau (10 minutes) et suspendre les vêtements (5 minutes). Pouvez-vous concevoir une nouvelle séquence intelligente et raisonnable afin que Xiaofang puisse terminer ces choses en au moins ( ) minutes ?

A.20

B.25

C.30

D.35

Vous ne vous y attendiez pas ? (En fait, je ne m'y attendais pas ~)

Dans ce processus, nous utilisons la machine à laver pour laver les vêtements = entrée, et sécher les vêtements = sortie Pendant que la machine à laver lave les vêtements, nous pouvons faire autre chose, donc. c'est E/S non bloquantesyo.

Réflexion

Pour comprendre les E/S non bloquantes, que devons-nous déterminer en premier ?

  • Nous devons nous assurer qu’il existe un système d’entrée/sortie.
  • Réfléchissez à la possibilité d'effectuer d'autres E/S pendant le processus d'E/S.
    • Peut------>Non bloquant
    • Impossible------->Bloquant

Écrivez une châtaigne

Créez d'abord un nouveau index.js, puis ouvrez notre vs-code frontal, ouvrez le terminal, exécutez <code>npm install glob pour installer un package glob pour nous aider à observer plus facilement si les E/S sont bloquées. index.js,再打开我们前端人的vs-code,打开终端,执行npm install glob安装一个glob包,来帮我们更加方便去观察I/O是否阻塞。

先来看阻塞I/O

代码先贴上:index.js

const glob = require(&#39;glob&#39;);

var result = null;
console.time(&#39;glob&#39;)
result = glob.sync(__dirname + &#39;/**/*&#39;)
console.timeEnd(&#39;glob&#39;)
console.log(result)

首先,先用require引入我们的glob包,接下来,用glob.sync去做一个打印目录的一个操作,将结果打印的同时,利用time/timeEnd,去记录时间,看node执行这个操作共花费多少时间。

在终端输入node index.js

Regardons d'abord le blocage des E/S

Quest-ce que les E/S non bloquantes dans Node.js ? Comprenez avec des exemples !Le code est collé en premier : index.js

const glob = require(&#39;glob&#39;);
var result = null;
console.time(&#39;glob&#39;)
glob(__dirname + &#39;/**/*&#39;,function(err,res){
    result = res;
    // console.log(result)
    console.log(&#39;got result&#39;);
})
console.timeEnd(&#39;glob&#39;)
console.log(&#39;今天你卷了没?&#39;)

Tout d'abord, utilisez require pour présenter notre package glob. Ensuite, utilisez glob.sync pour en créer un. Une opération d'impression d'un répertoire Lors de l'impression du résultat, utilisez time/timeEnd pour enregistrer l'heure et voir combien de temps il faut au nœud pour effectuer cette opération.

Entrez node index.js dans le terminal pour exécuter ce fichier directement

Regardez la première ligne. L'exécution sur mon ordinateur prend au total 20,93 millisecondes. un serveur, n'est plus petit.

Quest-ce que les E/S non bloquantes dans Node.js ? Comprenez avec des exemples !Regardez les E/S non bloquantes

Allez directement au code :

rrreee

Cette fois nous utilisons une fonction de rappel pour opérer, car il y a trop de lignes pour imprimer le résultat, nous allons le remplacer par l'impression « obtenu le résultat » et effectuons une opération d'impression d'instruction une fois le timing terminé, jetons un coup d'œil au résultat :

Tout d'abord, c'est notre temps : 3,258 ms, par rapport aux 20,93 précédents, il c'est simplement moins, pas trop. Eh bien, à la fin se trouve l'instruction que nous produisons, et finalement le résultat de l'opération que nous voulons est imprimé. En d'autres termes, il effectue d'autres opérations entre l'entrée et la sortie, n'a aucun impact sur le résultat et. prend beaucoup moins de temps ! 🎜🎜🎜Conclusion🎜🎜🎜Ma compréhension : Les E/S non bloquantes nous permettent de réduire beaucoup le temps d'attente, et pendant le temps d'attente, nous pouvons également effectuer d'autres opérations (tout conseil est le bienvenu !!!) 🎜

Il n'y a pas d'absolu en tout. Cela ne veut pas dire que les E/S non bloquantes sont forcément bonnes. Prenons l'exemple d'un restaurant, si un accident survient parmi les serveurs, tous les convives devront attendre. pour ce serveur, ce qui affectera la qualité globale du restaurant (oui (entendu comme un crash du serveur)) ; blocage des E/S. Comme il y a plusieurs serveurs, un service individuel, même si l'un d'entre eux a un accident, cela n'affectera pas la qualité globale, et l'embauche de plusieurs serveurs coûtera également en conséquence.

Pour plus de connaissances sur la programmation, veuillez visiter : Introduction à la 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