Weird result testing operation per sec












1















I'm running on node 8.11 this test script:



let end = false;

let i = 0;
setInterval(() => { i++; }).unref();


let k = 0;
async function loop() {
k++
if (end === false)
setImmediate(loop);
}

console.time('test');
loop()
.then(() => {
setTimeout(() => {
end = true;
console.log('interval', i);
console.log('recursion', k);
console.timeEnd('test');
}, 1000);
})


And the output is:



interval 997
recursion 824687
test: 1001.831ms


But, if I comment these two lines:



  // if (end === false)
// setImmediate(loop);


The results are:



interval 537
recursion 1
test: 1003.882ms


I studied hard the phases of nodejs but I don't understand why a setImmediate should impact on the results of the interval function.



Do you have some explanations?



Thank you










share|improve this question























  • I am not an expert of Node.js event loop, however here it is stated that " If the poll phase becomes idle and scripts have been queued with setImmediate(), the event loop may continue to the check phase rather than waiting". So maybe that milliseconds difference is due to the check phase activity added by the setImmediate() invocation.

    – P3trur0
    Nov 23 '18 at 16:10











  • But I'm looking that the interval result are: 997 i++ vs 537 i++ without setImmediate, the timing is ok 1 sec

    – Manuel Spigolon
    Nov 23 '18 at 16:15











  • The recursion values are right (because in the second test I don't do that) but this shouldn't impact on setInterval (i think..)

    – Manuel Spigolon
    Nov 23 '18 at 16:17











  • interesting find...it replicates in the browser as well, with even smaller numbers for the interval

    – mihai
    Nov 28 '18 at 13:40











  • Tried also node 10 and 11 and same behaviour, I'm still investigating using inspector

    – Manuel Spigolon
    Dec 3 '18 at 20:42
















1















I'm running on node 8.11 this test script:



let end = false;

let i = 0;
setInterval(() => { i++; }).unref();


let k = 0;
async function loop() {
k++
if (end === false)
setImmediate(loop);
}

console.time('test');
loop()
.then(() => {
setTimeout(() => {
end = true;
console.log('interval', i);
console.log('recursion', k);
console.timeEnd('test');
}, 1000);
})


And the output is:



interval 997
recursion 824687
test: 1001.831ms


But, if I comment these two lines:



  // if (end === false)
// setImmediate(loop);


The results are:



interval 537
recursion 1
test: 1003.882ms


I studied hard the phases of nodejs but I don't understand why a setImmediate should impact on the results of the interval function.



Do you have some explanations?



Thank you










share|improve this question























  • I am not an expert of Node.js event loop, however here it is stated that " If the poll phase becomes idle and scripts have been queued with setImmediate(), the event loop may continue to the check phase rather than waiting". So maybe that milliseconds difference is due to the check phase activity added by the setImmediate() invocation.

    – P3trur0
    Nov 23 '18 at 16:10











  • But I'm looking that the interval result are: 997 i++ vs 537 i++ without setImmediate, the timing is ok 1 sec

    – Manuel Spigolon
    Nov 23 '18 at 16:15











  • The recursion values are right (because in the second test I don't do that) but this shouldn't impact on setInterval (i think..)

    – Manuel Spigolon
    Nov 23 '18 at 16:17











  • interesting find...it replicates in the browser as well, with even smaller numbers for the interval

    – mihai
    Nov 28 '18 at 13:40











  • Tried also node 10 and 11 and same behaviour, I'm still investigating using inspector

    – Manuel Spigolon
    Dec 3 '18 at 20:42














1












1








1


1






I'm running on node 8.11 this test script:



let end = false;

let i = 0;
setInterval(() => { i++; }).unref();


let k = 0;
async function loop() {
k++
if (end === false)
setImmediate(loop);
}

console.time('test');
loop()
.then(() => {
setTimeout(() => {
end = true;
console.log('interval', i);
console.log('recursion', k);
console.timeEnd('test');
}, 1000);
})


And the output is:



interval 997
recursion 824687
test: 1001.831ms


But, if I comment these two lines:



  // if (end === false)
// setImmediate(loop);


The results are:



interval 537
recursion 1
test: 1003.882ms


I studied hard the phases of nodejs but I don't understand why a setImmediate should impact on the results of the interval function.



Do you have some explanations?



Thank you










share|improve this question














I'm running on node 8.11 this test script:



let end = false;

let i = 0;
setInterval(() => { i++; }).unref();


let k = 0;
async function loop() {
k++
if (end === false)
setImmediate(loop);
}

console.time('test');
loop()
.then(() => {
setTimeout(() => {
end = true;
console.log('interval', i);
console.log('recursion', k);
console.timeEnd('test');
}, 1000);
})


And the output is:



interval 997
recursion 824687
test: 1001.831ms


But, if I comment these two lines:



  // if (end === false)
// setImmediate(loop);


The results are:



interval 537
recursion 1
test: 1003.882ms


I studied hard the phases of nodejs but I don't understand why a setImmediate should impact on the results of the interval function.



Do you have some explanations?



Thank you







node.js performance event-loop






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 21 '18 at 12:34









Manuel SpigolonManuel Spigolon

1,61611832




1,61611832













  • I am not an expert of Node.js event loop, however here it is stated that " If the poll phase becomes idle and scripts have been queued with setImmediate(), the event loop may continue to the check phase rather than waiting". So maybe that milliseconds difference is due to the check phase activity added by the setImmediate() invocation.

    – P3trur0
    Nov 23 '18 at 16:10











  • But I'm looking that the interval result are: 997 i++ vs 537 i++ without setImmediate, the timing is ok 1 sec

    – Manuel Spigolon
    Nov 23 '18 at 16:15











  • The recursion values are right (because in the second test I don't do that) but this shouldn't impact on setInterval (i think..)

    – Manuel Spigolon
    Nov 23 '18 at 16:17











  • interesting find...it replicates in the browser as well, with even smaller numbers for the interval

    – mihai
    Nov 28 '18 at 13:40











  • Tried also node 10 and 11 and same behaviour, I'm still investigating using inspector

    – Manuel Spigolon
    Dec 3 '18 at 20:42



















  • I am not an expert of Node.js event loop, however here it is stated that " If the poll phase becomes idle and scripts have been queued with setImmediate(), the event loop may continue to the check phase rather than waiting". So maybe that milliseconds difference is due to the check phase activity added by the setImmediate() invocation.

    – P3trur0
    Nov 23 '18 at 16:10











  • But I'm looking that the interval result are: 997 i++ vs 537 i++ without setImmediate, the timing is ok 1 sec

    – Manuel Spigolon
    Nov 23 '18 at 16:15











  • The recursion values are right (because in the second test I don't do that) but this shouldn't impact on setInterval (i think..)

    – Manuel Spigolon
    Nov 23 '18 at 16:17











  • interesting find...it replicates in the browser as well, with even smaller numbers for the interval

    – mihai
    Nov 28 '18 at 13:40











  • Tried also node 10 and 11 and same behaviour, I'm still investigating using inspector

    – Manuel Spigolon
    Dec 3 '18 at 20:42

















I am not an expert of Node.js event loop, however here it is stated that " If the poll phase becomes idle and scripts have been queued with setImmediate(), the event loop may continue to the check phase rather than waiting". So maybe that milliseconds difference is due to the check phase activity added by the setImmediate() invocation.

– P3trur0
Nov 23 '18 at 16:10





I am not an expert of Node.js event loop, however here it is stated that " If the poll phase becomes idle and scripts have been queued with setImmediate(), the event loop may continue to the check phase rather than waiting". So maybe that milliseconds difference is due to the check phase activity added by the setImmediate() invocation.

– P3trur0
Nov 23 '18 at 16:10













But I'm looking that the interval result are: 997 i++ vs 537 i++ without setImmediate, the timing is ok 1 sec

– Manuel Spigolon
Nov 23 '18 at 16:15





But I'm looking that the interval result are: 997 i++ vs 537 i++ without setImmediate, the timing is ok 1 sec

– Manuel Spigolon
Nov 23 '18 at 16:15













The recursion values are right (because in the second test I don't do that) but this shouldn't impact on setInterval (i think..)

– Manuel Spigolon
Nov 23 '18 at 16:17





The recursion values are right (because in the second test I don't do that) but this shouldn't impact on setInterval (i think..)

– Manuel Spigolon
Nov 23 '18 at 16:17













interesting find...it replicates in the browser as well, with even smaller numbers for the interval

– mihai
Nov 28 '18 at 13:40





interesting find...it replicates in the browser as well, with even smaller numbers for the interval

– mihai
Nov 28 '18 at 13:40













Tried also node 10 and 11 and same behaviour, I'm still investigating using inspector

– Manuel Spigolon
Dec 3 '18 at 20:42





Tried also node 10 and 11 and same behaviour, I'm still investigating using inspector

– Manuel Spigolon
Dec 3 '18 at 20:42












0






active

oldest

votes











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53412160%2fweird-result-testing-operation-per-sec%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























0






active

oldest

votes








0






active

oldest

votes









active

oldest

votes






active

oldest

votes
















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53412160%2fweird-result-testing-operation-per-sec%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Can a sorcerer learn a 5th-level spell early by creating spell slots using the Font of Magic feature?

Does disintegrating a polymorphed enemy still kill it after the 2018 errata?

A Topological Invariant for $pi_3(U(n))$