Echemos un vistazo a qué es la operación de bloqueo;
Simulo un método Sleep () para retrasar la impresión Hello Star durante 10 segundos.
requesthandlers.js
La copia del código es la siguiente:
función start () {
console.log (se llamó al controlador de solicitud 'Inicio'. ");
function sleep (milisegunds) {
var starttime = new Date (). GetTime ();
while (new Date (). GetTime () <starttime + millones segundos);
}
dormir (10000);
devolver "hola inicio";
}
function upload () {
console.log ("Solicitar el controlador 'Subiendo' se llamó.");
devolver "hola subiendo";
}
exports.start = inicio;
exports.upload = cargar;
Al solicitar /comenzar, se retrasó en 10 segundos antes de imprimir.
Al solicitar/cargar, no se verá afectado.
A continuación, haga un experimento:
Ingrese http: // localhost: 8888/comience en la barra de direcciones de la primera ventana del navegador, ¡pero no lo abra primero!
Ingrese http: // localhost: 8888/cargue en la barra de direcciones de la segunda ventana del navegador. Del mismo modo, ¡no lo abras primero!
Presionamos ENTER en la primera ventana ("/inicio") y cambiamos rápidamente a la segunda ventana ("/cargue") y presione ENTER.
Nota, lo que pasó:
La URL /Start tardó 10 segundos en cargarse, que era lo mismo que esperábamos.
¡La URL /Subiendo en realidad tardó 10 segundos!
Pero no tiene una operación similar a Sleep () en el controlador de solicitud correspondiente. ¿Cuál es el problema?
La razón es que Start () incluye operaciones de bloqueo. Para decirlo vívidamente, "bloquea todos los demás trabajos de procesamiento".
Node.js es un solo hilo y puede procesar tareas en paralelo sin agregar hilos adicionales.
Implementa operaciones paralelas a través de bucles de eventos, y debemos hacer un uso completo de esto; evite las operaciones de bloqueo tanto como sea posible, en su lugar, usar operaciones sin bloqueo con más frecuencia.
En la siguiente sección, introduciremos cómo implementar operaciones no de bloqueo.