我想知道有没有人知道在node.js中如何实现 setTimeout。我相信我曾经在某个地方读到过,这不是V8的一部分。我试图快速找到实现方式,但在源码(BIG)中找不到它。例如,我发现了 timers.js 这个文件,然后又链接到 timer_wrap.cc。但这些文件不能完全回答我的问题。
- V8是否有 setTimeout 实现?从源代码来看,我猜答案是否定的。
setTimeout 是如何实现的?JavaScript还是本地代码或两者的组合?从 timers.js 文件中,我认为是两者结合:
var Timer = process.binding('timer_wrap').Timer;`
当添加多个计时器(setTimeout)时,Node.js如何知道先执行哪一个?它会将所有计时器添加到一个集合中并排序吗?如果是排序的,那么查找需要执行的超时时间是O(1),插入是O(log n)吗?但是我在timers.js中看到他们使用了一个链表?
执行这段脚本时:
var x = new Array(1000),
len = x.length;
/**
* Returns a random integer between min and max
* Using Math.round() will give you a non-uniform distribution!
*/
function getRandomInt (min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
var y = 0;
for (var i = 0; i < len; i++) {
var randomTimeout = getRandomInt(1000, 10000);
console.log(i + ', ' + randomTimeout + ', ' + ++y);
setTimeout(function () {
console.log(arguments);
}, randomTimeout, randomTimeout, y);
}
你的CPU使用率会稍微增加一点,但不会太多吗?