Maison >interface Web >js tutoriel >Créez facilement un serveur nodejs (7) : Implémentation du blocage d'opérations_node.js

Créez facilement un serveur nodejs (7) : Implémentation du blocage d'opérations_node.js

WBOY
WBOYoriginal
2016-05-16 16:25:461232parcourir

Voyons ce que sont les opérations de blocage

Je simule une méthode sleep() pour retarder l'impression de hello star de 10 secondes.

requestHandlers.js

Copier le code Le code est le suivant :

fonction start() {
console.log("Le gestionnaire de requêtes 'start' a été appelé.");
fonction sommeil (milliSeconds) {
var startTime = new Date().getTime();
while (new Date().getTime() < startTime milliSeconds);
>
dormir(10000);
Renvoyez "Bonjour Start" ;
>

fonction upload() {
console.log("Le gestionnaire de requêtes 'upload' a été appelé.");
Renvoyez « Bonjour le téléchargement » ;
>

exports.start = start;
exports.upload = télécharger;

Lors de la demande de /start, il y a un délai de 10 secondes avant l'impression.

Lors de la demande/du téléchargement, cela ne sera pas affecté.

Faisons une expérience :

Entrez http://localhost:8888/start dans la barre d'adresse de la première fenêtre du navigateur, mais ne l'ouvrez pas encore !

Entrez http://localhost:8888/upload dans la barre d'adresse de la deuxième fenêtre du navigateur Encore une fois, ne l'ouvrez pas encore !

Nous appuyons sur Entrée dans la première fenêtre ("/start"), puis passons rapidement à la deuxième fenêtre ("/upload") et appuyons sur Entrée.

Attention, que s'est-il passé :

L'URL

/start a mis 10 secondes à se charger, ce à quoi nous nous attendions.

L'URL

/upload a également pris 10 secondes !

Oui, il n'a pas d'opérations similaires à sleep() dans le gestionnaire de requêtes correspondant. Quel est le problème ?

La raison est que start() contient des opérations de blocage. Pour le dire au sens figuré, "cela bloque tout autre travail de traitement".

Node.js est monothread et peut traiter des tâches en parallèle sans ajouter de threads supplémentaires.

Il implémente des opérations parallèles via une boucle d'événements. Nous devrions en tirer pleinement parti - évitez autant que possible les opérations bloquantes et utilisez plutôt des opérations non bloquantes.

Dans la section suivante, nous présenterons comment mettre en œuvre des opérations non bloquantes.

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn