setTimeout有没有限制?

具体讲(服务器端)V8,并假设我不关心准确性,因为我可以检测和补偿它,我可以从字面上设置成千上万相对简单的超时使用setTimeout彼此相隔,而不面对任何其他限制除了内存? 如果我使用的系统在任何时候可能有成千上万个计划的超时,那么我是否应该注意到这个问题?

为了logging,我已经阅读了John Resig关于Javascript定时器如何工作的优秀文章,所以不需要指出任何已经涵盖的东西:)我知道node.js是单线程的,定时器可以阻塞其他定时器,如果它们需要的时间太长等等

PS:我正在严格地理解我描述的是多么可行,没有必要指出“确实有更好的方法去做你打算做的事情!”。

唯一可能遇到的现实世界限制是可用于节点的内存量。 使用下面的代码来testing。 我使用oneMillion和int32Max成功地运行了下面的示例。 当使用int64Max时,我从节点收到以下错误。 我正在使用带有4GB RAM的64位窗口。

 FATAL ERROR: CALL_AND_RETRY_2 Allocation failed - process out of memory 

要testing的节点代码:

 var util = require('util'); var int64Max = 9007199254740992; var int32Max = 2147483647; var oneMillion = 1000000; var tenThousand = 10000; var counter = 0; //Exchange the limiter with one of the above vars to test. for (var i = 0; i < oneMillion; i++){ setTimeout(log, 1); //Required as the timeout/callback method will not be called until the loop ends due //to node/js being single threaded. util.log('loop:' + i); } function log(){ util.log('callback: ' + counter++); } 

我不知道节点是如何操作的,但是如果你创build了MAXINT + 1定时器而不让它们运行,你可能会冒一个整数溢出的风险。