当节点在node.js中结束时,会指定哪些事件?

时间:2015-10-24 20:02:20

标签: javascript node.js single-threaded

我已经读过tick是一个执行单元,其中nodejs事件循环决定运行其队列中的所有内容,但除了明确说明process.nextTick()什么事件导致node.js事件循环开始处理一个新的蜱?是等待I / O吗?那么cpu绑定计算呢?或者只要我们输入新功能?

2 个答案:

答案 0 :(得分:3)

process.nextTick()不会导致Node.JS开始新的滴答。它会使提供的代码等待下一个滴答。

这是理解它的绝佳资源:http://howtonode.org/understanding-process-next-tick

至于获取刻度的事件,我不相信运行时提供的。你可以"假"它像:

var tickEmitter = new events.EventEmitter();
function emit() {
    tickEmitter.emit('tick');
    process.nextTick( emit );
}
tickEmitter.on('tick', function() {
    console.log('Ticked');
});
emit();

编辑:要回答您的其他一些问题,另一篇文章会做出非凡的演示:What exactly is a Node.js event loop tick?

答案 1 :(得分:1)

当当前正在执行的Javascript将控制返回到事件循环(例如,完成执行)时,

nextTick注册要调用的回调。对于CPU绑定操作,这将在函数完成时进行。对于异步操作,这将是异步操作启动并且任何其他立即代码完成时(但不是当异步操作本身已完成时,因为当它完成从事件队列服务时将进入事件队列)

来自node.js doc for process.nextTick()

  

当前事件循环转为完成后,调用回调函数。

     

这不是setTimeout(fn,0)的简单别名,而是更多   高效。它在任何其他I / O事件(包括计时器)之前运行   在事件循环的后续滴答中触发。

一些例子:

console.log("A");
process.nextTick(function() { 
    // this will be called when this thread of execution is done
    // before timers or I/O events that are also in the event queue
    console.log("B");
});
setTimeout(function() {
    // this will be called after the current thread of execution
    // after any `.nextTick()` handlers in the queue
    // and after the minimum time set for setTimeout()
    console.log("C");
}, 0);
fs.stat("myfile.txt", function(err, data) {
    // this will be called after the current thread of execution
    // after any `.nextTick()` handlers in the queue
    // and when the file I/O operation is done
    console.log("D");
});
console.log("E");

输出:

A
E
B
C
D