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
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.