我构建了一个nodejs应用程序,该应用程序应执行多个任务。
我的app.js具有对管理器模块的函数调用,该模块控制了这些任务。
我想从我的app.js中调用该函数,并每30秒执行一次这些任务。
类似:
setInterval(manager.tasks(), 30000);
我的问题是,如果使用setInterval可能会给我带来任何性能问题(降低计算机速度,阻塞资源或任何其他原因)
有没有更有效的方法来做到这一点?或者setInterval可以吗?
答案 0 :(得分:1)
答案 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派生一个新的子进程并将您的东西放入其中那个。