【发布时间】:2018-01-22 11:03:54
【问题描述】:
我有一个节点脚本,它应该利用单个节点进程可以获得的所有 CPU 资源。但是我发现 setInterval 太慢了。
果然我在文档中找到了这个:
当延迟大于 2147483647 或小于 1 时,延迟为 设置为 1。
来源:https://nodejs.org/api/timers.html#timers_setinterval_callback_delay_args
现在我想知道是否有办法进一步降低限制,或者是否有可以使用的替代功能。
我不能只使用普通循环,因为还有其他异步的东西需要同时运行。
编辑:
再说一遍:我不能只使用普通循环,因为还有其他异步的东西需要同时运行。
我不知道为什么这很难理解。
在正常循环运行时,您正在阻止其他所有内容的执行。将循环放在另一个异步执行的函数中并不重要。
这是什么意思?
让我们看一些例子:
setInterval(()=>{console.log('a')},1000) // asynchronous thing that needs to run in the background
while (true) {
// do whatever
}
这段代码会做什么?它会阻止一切。 console.log('a') 不会被连续执行。
setInterval(()=>{console.log('a')},1000) // asynchronous thing that needs to run in the background
setTimeout(()=>{
while (true) {
// do whatever
}
}, 1)
这也将在 while 循环开始时立即阻止间隔的执行。
【问题讨论】:
-
那你为什么要把它放在
setInterval中呢?只需将其放入无限for或while循环! -
你能发布你当前的代码吗?
-
因为 Node 是单线程的。所以异步更像是中断。
标签: javascript node.js loops setinterval