1. Проблема с использованием таймеров в узле заключается в том, что она не является точной. Например, SetTimeout () устанавливает задачу, которая будет выполнена через 10 мс, но через 9 мс задача занимает 5 мс. Когда снова поворачивается таймер, он был отложен на 4 мс.
Ну, есть так много вещей, чтобы сказать о таймере в узле.
2. Посмотрите на код:
Кода -копия выглядит следующим образом:
process.nexttick (function () {
console.log ("отсроченное исполнение");
});
console.log ("выполнять 1 нормально");
console.log («обычное исполнение 2»);
console.log («Нормальное исполнение 3»);
console.log («обычное исполнение 4»);
Через этот пример я думаю, что каждый может ясно видеть, для чего используется NextTick (). Это в основном используется для асинхронного исполнения.
Глядя на код:
Кода -копия выглядит следующим образом:
setimmediate (function () {
console.log ("отсроченное исполнение");
});
console.log («нормальное исполнение»);
Мы обнаружили, что Setimmediate также выполняется асинхронно. Это странно
Так в чем же разница между ним и NextTick ()?
Посмотрите на код:
Код 1:
Кода -копия выглядит следующим образом:
process.nexttick (function () {
console.log ("Desteplitick Delay")
});
setimmediate (function () {
console.log ("setImmediate Dolempt");
});
console.log («нормальное исполнение»);
результат:
Код 2:
Кода -копия выглядит следующим образом:
setimmediate (function () {
console.log ("setImmediate Dolempt");
});
process.nexttick (function () {
console.log ("Desteplitick Delay")
});
console.log («нормальное исполнение»);
результат:
Я обнаружил, что, хотя кодовая последовательность отличается, результаты выполнения одинаковы.
Из результатов мы можем найти:
Приоритет выполнения функции обратного вызовов nexttick () выше, чем setimmediate ();
Process.nexttick () принадлежит Idle Observer, а setimmediate () принадлежит проверке наблюдателя. В каждом раунде проверки петли наблюдатель на холостом ходу впереди наблюдателя ввода/вывода, а наблюдатель ввода/вывода впереди проверки наблюдателя.
В конкретной реализации функция обратного вызова process.nexttick () хранится в массиве.
Результат setimmediate () сохраняется в связанном списке.
С точки зрения поведения, Process.NextTick () выполнит все функции обратного вызова в массиве в каждом цикле.
setimmediate () выполняет функцию обратного вызова в связанном списке в каждом цикле.
Кода -копия выглядит следующим образом:
// добавить 2 функции обратного вызова nextTick ()
process.nexttick (function () {
console.log ("Nexttick задержка исполнения 1");
});
process.nexttick (function () {
console.log ("Nexttick Delay Ceffration 2");
});
// Добавить две функции обратного вызова setimmediate ()
setimmediate (function () {
console.log ("setimmediate задержки выполнение 1");
process.nexttick (function () {
console.log ("сильная вставка");
});
});
setimmediate (function () {
console.log ("setimmediate задержки выполнения 2");
});
console.log («нормальное исполнение»);
Из результатов выполнения видно, что когда выполняется первая функция обратного вызова SetImmediate (), вторая не выполняется немедленно, но входит в следующий раунд цикла и снова выполняется в приоритете NextTick () и SetImmediate () Times. Причиной этой конструкции является обеспечение того, чтобы каждый цикл мог быть быстро выполнен и предотвратить слишком много потребления ЦП и блокировать последующие вызовы ввода -вывода.
Выше приведено информация о разнице между NextTick () и SetImmediate () в node.js. Вы ясно о разнице между ними?