我想知道是否有人知道如何在node.js中實現setTimeout。我相信我已經讀過某些地方,這不是V8的一部分。我很快試圖找到實現,但無法在源代碼(BIG)中找到它。例如,我找到了這個timers.js文件,然後例如鏈接到timer_wrap.cc。但是這些文件並沒有完全回答我的所有問題。setTimeout如何在node.js中實現
- 請問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使用率的一點點,但沒有那麼多嗎?
- 我想知道如果我將在排序列表中逐一實現所有這些回調,如果我會得到更好的性能?
在這個例子中,超時總是一樣的? 60秒? – Alfred
所以你希望在60秒內發生一些事情,並且你正在試圖弄清楚是把所有這些事情集合在一起,還是要爲每個事件分別創建一個setTimeout? –
沒有抱歉。你鏈接的文件有60秒延遲。我的延誤可能是任何事情和很多! – Alfred