1. O problema do uso de temporizadores no nó é que ele não é preciso. Por exemplo, o setTimeout () define uma tarefa a ser executada após 10ms, mas após 9ms, uma tarefa leva 5ms. Quando é o timer voltado novamente, ele foi adiado por 4ms.
Bem, há tantas coisas a dizer sobre o cronômetro no nó.
2. Olhe para o código:
A cópia do código é a seguinte:
process.NextTick (function () {
console.log ("execução atrasada");
});
console.log ("Execute 1 normalmente");
console.log ("Execução Ordinária 2");
console.log ("Execução normal 3");
console.log ("Execução Ordinária 4");
Através deste exemplo, acho que todos podem ver claramente para o que o NextTick () é usado. É usado principalmente para execução assíncrona.
Olhando para o código:
A cópia do código é a seguinte:
setImediate (function () {
console.log ("execução atrasada");
});
console.log ("Execução normal");
Descobrimos que o SetImediate também é executado de forma assíncrona. É estranho
Então, qual é a diferença entre ele e NextTick ()?
Veja o código:
Código 1:
A cópia do código é a seguinte:
process.NextTick (function () {
Console.log ("NextTick Atraso")
});
setImediate (function () {
console.log ("SetImediate Atrair");
});
console.log ("Execução normal");
resultado:
Código 2:
A cópia do código é a seguinte:
setImediate (function () {
console.log ("SetImediate Atrair");
});
process.NextTick (function () {
Console.log ("NextTick Atraso")
});
console.log ("Execução normal");
resultado:
Descobri que, embora a sequência de código seja diferente, os resultados da execução são os mesmos.
A partir dos resultados, podemos encontrar:
NextTick () A prioridade de execução da função de retorno de chamada é maior que o setImediate ();
Process.NextTick () pertence ao Observer Idle, e SetImediate () pertence ao Observer. Em cada rodada de verificações de loop, o observador ocioso está à frente do observador de E/S e o observador de E/S está à frente do Observer de cheques.
Em implementação específica, a função de retorno de chamada do processo.NextTick () é armazenada em uma matriz.
O resultado do setImediate () é salvo na lista vinculada.
Em termos de comportamento, Process.NextTick () executará todas as funções de retorno de chamada na matriz em cada loop.
setImediate () executa uma função de retorno de chamada na lista vinculada em cada loop.
A cópia do código é a seguinte:
// Adicionar 2 funções de retorno de chamada nextTick ()
process.NextTick (function () {
console.log ("NextTick atrasa a execução 1");
});
process.NextTick (function () {
console.log ("NextTick Atraso Execução 2");
});
// Adicione duas funções de retorno de chamada setImediate ()
setImediate (function () {
console.log ("atrasos de setImediate Execution 1");
process.NextTick (function () {
console.log ("inserção forte");
});
});
setImediate (function () {
console.log ("Atrasos de cenário de execução 2");
});
console.log ("Execução normal");
A partir dos resultados da execução, pode -se observar que, quando a primeira função de retorno de chamada SetImediate () é executada, a segunda não é executada imediatamente, mas entra na próxima rodada de loop e é executada novamente na ordem do NextTick () Priority e SetImEdiate (). O motivo desse design é garantir que cada loop possa ser executado rapidamente e impedir que a CPU consuma demais e bloqueie as chamadas de E/S subsequentes.
O exposto acima são as informações sobre a diferença entre NextTick () e SetImediate () em Node.js. Você está claro sobre a diferença entre eles?