Vamos dar uma olhada no que é a operação de bloqueio;
Eu simula um método de sono () para adiar a hello star print por 10 segundos.
requestHandlers.js
A cópia do código é a seguinte:
função start () {
console.log ("Solicitação Handler 'Start' foi chamado.");
função sono (milissegundos) {
var startTime = new Date (). getTime ();
while (new date (). gettime () <starttime + milhões de segundos);
}
sono (10000);
retornar "Hello Start";
}
função upload () {
console.log ("O manipulador de solicitação 'upload' foi chamado.");
retornar "Hello upload";
}
exports.start = start;
exports.upload = upload;
Ao solicitar /iniciar, atrasou 10 segundos antes da impressão.
Ao solicitar/fazer upload, ele não será afetado.
Em seguida, faça um experimento:
Digite http: // localhost: 8888/Inicie na barra de endereço da janela do primeiro navegador, mas não a abra primeiro!
Digite http: // localhost: 8888/upload na barra de endereço da segunda janela do navegador. Da mesma forma, não abra primeiro!
Pressionamos Enter na primeira janela ("/Iniciar") e alternamos rapidamente para a segunda janela ("/upload") e pressionamos Enter.
Observe o que aconteceu:
O /Start URL levou 10 segundos para carregar, o que era o mesmo que esperávamos.
O URL /Upload levou 10 segundos!
Mas não possui uma operação semelhante ao Sleep () no manipulador de solicitação correspondente. Qual é o problema?
O motivo é que o start () inclui o bloqueio de operações. Para dizer vividamente, "ele bloqueia todos os outros trabalhos de processamento".
O Node.js é um thread único e pode processar tarefas em paralelo sem adicionar threads adicionais.
Ele implementa operações paralelas por meio de loops de eventos e devemos fazer pleno uso disso - evite bloquear operações o máximo possível; em vez disso, use operações não bloqueadoras com mais frequência.
Na próxima seção, introduziremos como implementar operações não bloqueadoras.