Разница между методами process.nextTick () и setImmediate ()

Опубликовано: 30 Июля, 2021

Чтобы понять разницу между методами process.nextTick () и setImmediate (), нам сначала нужно понять работу цикла событий Node.js.

Что такое цикл событий Node.js?
Поскольку JavaScript является однопоточным, то есть одновременно выполняет только один процесс, именно цикл событий позволяет Node.js выполнять неблокирующие операции ввода-вывода.

Работа цикла событий?
В начале программы JavaScript инициализируется цикл событий. В цикле событий выполняется несколько операций. Ниже приведена последовательность, в которой разные они выполняются за одну итерацию цикла событий. Эти операции обрабатываются в очереди.

timers–>pending callbacks–>idle,prepare–>connections(poll,data,etc)–>check–>close callbacks

Понимание метода process.nextTick (): всякий раз, когда инициализируется новая очередь операций, мы можем рассматривать ее как новый тик . Метод process.nextTick () добавляет функцию обратного вызова в начало следующей очереди событий. Следует отметить, что в начале программы метод process.nextTick () вызывается в первый раз перед обработкой цикла событий.

Синтаксис:

 process.nextTick (обратный вызов);

Понимание метода setImmdeiate (): всякий раз, когда мы вызываем метод setImmediate (), его функция обратного вызова помещается в фазу проверки следующей очереди событий. Здесь следует отметить небольшую деталь: метод setImmediate () вызывается на этапе опроса, а его функции обратного вызова вызываются на этапе проверки .

Синтаксис:

 setImmediate (обратный вызов);

Пример:




setImmediate( function A() {
console.log( "1st immediate" );
});
setImmediate( function B() {
console.log( "2nd immediate" );
});
process.nextTick( function C() {
console.log( "1st process" );
});
process.nextTick( function D() {
console.log( "2nd process" );
});
// First event queue ends here
console.log( "program started" );

Для указанной выше программы очереди событий инициализируются следующим образом:

  1. В первой очереди событий печатается только «программа запущена».
  2. Затем запускается вторая очередь событий, и функция C, т.е. обратный вызов метода process.nextTick (), помещается в начало очереди событий. C выполняется, и очередь заканчивается.
  3. Затем предыдущая очередь событий завершается, а третья очередь событий инициализируется обратным вызовом D. Затем функция обратного вызова A метода setImmdeiate () помещается в, за которым следует B.
    Теперь третья очередь событий выглядит так:
     DAB

    Теперь функции D, A, B выполняются в том порядке, в котором они присутствуют в очереди.

    Выход: