什么事件指定在tick.js中打勾时结束?

我已经读过,tick是一个执行单元,其中nodejs事件循环决定在其队列中运行所有内容,但除了明确说出process.nextTick()什么事件导致node.js事件循环开始处理新的tick ? 它在I / O上等待吗? 那么CPU约束计算呢? 还是每当我们进入一个新的功能?


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

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

至于获取tick的事件,我不相信运行时提供了这个。 你可以像这样“伪造”它:

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

编辑:为了回答你的其他一些问题,另一篇文章做了一个非常出色的工作来证明:Node.js事件循环到底是什么?


nextTick在当前正在执行的Javascript将控制权返回给事件循环(例如,完成执行)时注册要调用的回调。 对于CPU限制操作,这将在函数完成时执行。 对于异步操作,这将是异步操作开始并执行任何其他即时代码(而不是当异步操作本身已完成时,因为它将在事件队列中完成时从事件队列中完成)将进入异步操作。 。

来自process.nextTick()的node.js文档:

一旦当前事件循环运行完成,调用回调函数。

这不是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
链接地址: http://www.djcxy.com/p/29927.html

上一篇: What events specify when a tick ends in node.js?

下一篇: What is a good practice for dependency injection in Ruby?