Node.js setInterval每30秒重复一次任务

时间:2019-06-19 08:54:11

标签: javascript node.js

我构建了一个nodejs应用程序,该应用程序应执行多个任务。

我的app.js具有对管理器模块的函数调用,该模块控制了这些任务。

我想从我的app.js中调用该函数,并每30秒执行一次这些任务。

类似:

setInterval(manager.tasks(), 30000);

我的问题是,如果使用setInterval可能会给我带来任何性能问题(降低计算机速度,阻塞资源或任何其他原因)

有没有更有效的方法来做到这一点?或者setInterval可以吗?

4 个答案:

答案 0 :(得分:1)

改为使用node-cronnode-schedule

答案 1 :(得分:1)

setInterval在标准节点js中实现,您不会遇到任何性能/阻塞问题,大多数库也使用setInterval

答案 2 :(得分:1)

这取决于您要执行的工作/处理的繁重程度,setInterval是异步的,因此您的代码将仅每30秒运行一次,但同时JavaScript是单线程的,因此如果您正在执行您的任务需要大量工作,一次运行30秒可能需要很长时间才能执行,从而阻塞了资源。

在大多数情况下,使用setInterval应该可以,但是如果您真的想模拟多线程,或者如果您在任务中做过多的工作,则可能需要生成另一个子进程https://nodejs.org/api/child_process.html或改用新的Worker Threads API https://nodejs.org/api/worker_threads.html,但请记住,它的实现不像setInterval调用那样简单

答案 3 :(得分:1)

这完全取决于您在setInterval中执行的功能。如果它是受I / O约束的操作,那么您就不必担心太多,因为libuv会自行处理。但是如果它受CPU约束,那么我建议您使用child_process api派生一个新的子进程并将您的东西放入其中那个。