我有一个用 nodejs 制作的 beanstalkapp 工作程序,它的作用是有一个 PHP 应用程序可以完成所有站点工作,如果有错误、问题或通知,或者它会将它添加到 beanstalkapp 中。然后,nodejs 需要经常运行,检查 beanstalkapp 是否有任何消息,并对它们做一些事情(给某人发电子邮件,将其添加到日志中,在某处发布)。
我的问题是,这种糟糕的表现是明智的还是有更好的方法来做到这一点?我会假设 setInterval 不会让进程结束,因此会很糟糕?
我有一个用 nodejs 制作的 beanstalkapp 工作程序,它的作用是有一个 PHP 应用程序可以完成所有站点工作,如果有错误、问题或通知,或者它会将它添加到 beanstalkapp 中。然后,nodejs 需要经常运行,检查 beanstalkapp 是否有任何消息,并对它们做一些事情(给某人发电子邮件,将其添加到日志中,在某处发布)。
我的问题是,这种糟糕的表现是明智的还是有更好的方法来做到这一点?我会假设 setInterval 不会让进程结束,因此会很糟糕?
这取决于你的setInterval
时间。javascript 解释器在事件之间休眠。因此,在这之间,setInterval
您的 node.js 应用程序消耗零(或几乎零)CPU 时间。
因此,应用程序在整个系统上产生的负载量取决于setInterval
触发频率。每秒一次几乎不会消耗任何 CPU。另一方面,每 1 毫秒一次(以 1 或 0 的 setInterval 时间调用)可能会使您的系统陷入瘫痪,尤其是当您在资源受限的机器或 VM 上运行时。
根据我的经验,一个好的折衷方案是大约 50 或 100 毫秒(每秒 20 或 10 次)。即使是实时应用(因为人类感知比 20Hz 慢很多),它的响应速度也足够快,并且足够长,对系统的其余部分几乎没有影响。