Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
alessandro
6 лет назад

Node.js: process.nextTick() vs setImmediate()

Есть важное отличие между process.nextTick и setImmediate. Вызов nextTick добавляет событие в начало очереди и оно выполнится первым после завершения текущего цикла событий. setImmediate добавляет событие в конец.

Например если вы разбили большую функцию на несколько частей и в конце каждой части вызываете следующую через nextTick - то это совершенно бесполезно, поскольку никакое другое событие все равно обработано не будет, пока все части вашей функции не отработают. А вызов через setImmediate позволит втиснутся другим обработчикам

Пример

вот программа которая выполняет подсчет сложного хэша, типа блокчейна или вроде того, когда каждый последующий элемент включает в себя предыдущий.

const crypto = require('crypto');
var s='start';
var num=0;

setInterval(()=>{
    num++;
    console.log(`Incomming call ${num}`);   
}, 1000);

function makeCB(i) {
    return ()=>{
      console.log(`i = ${i}`);
        for (var j=0;j<1000;j++) {
            var hash = crypto.createHash('sha256');
            hash.update(s+i+''+j);      
            s=hash.digest('hex');
        }
    }
}

var arr=[];
for(var i=0;i<1000;i++) {
    arr.push(makeCB(i));
}

function step(){
    var func=arr.shift();
    if (func) { 
        func();
        process.nextTick(step);
        //setImmediate(step);
    }
}

step();

console.log(s);

Когда используется nextTick, события от таймера начнут обрабатываться только после завершения расчета хэша. Если setImmediate - расчет хэша не помешает обработке событий таймера.

Следствие

Использование setImmediate предпочтительнее. А использование nextTick может привести к неожиданным тормозам когда необходима параллельная обработка запросов - программа будет выглядеть как асинхронная, но фактически выполняться синхронно.

20
0.000 GOLOS
На Golos с October 2017
Комментарии (0)
Сортировать по:
Сначала старые