我想知道是否有人知道setTimeout在 node.js 中是如何实现的。我相信我在某处读到这不是 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使用率,但不是那么多?
- 我想知道如果我会获得更好的性能,是否在排序列表中一一实现所有这些回调?