在我正在开发的这个 Node 应用程序中,用户可以进行预约。 预约后,用户将在实际预约前 X 小时通过邮件收到提醒。
我正在考虑使用 Node-schedule 来完成这项任务。
对于每个约会:设置一个 future 的日期,发送一次提醒邮件并删除这个特定的预定工作
但是...当应用程序增长时,可能会有很多预约,这意味着会有很多 Node 调度进程同时休眠并等待触发...
在正常的一天,假设我们为每个客户预订了 180 个 future 约会,并假设该应用程序现在有 50 个客户。这为我们提供了大约 9000 个 sleep 和等待触发的计划任务。
问题:这完全可以吗? ...或者所有这些同时安排的任务是否会太多?
最佳答案
简答:9000 不是很多,你可以走了。但是,我建议您编写一个基准以供您自己查看。
我检查了 node-schedule 的源代码,果然,它将调度委托(delegate)给 setTimeout
来处理基于日期的任务。这意味着您的作业是使用 node.js 内部事件循环安排的。
这段代码非常高效,因为 node.js 是为同时处理数千个请求而量身定制的。
无论待处理作业的数量如何,node.js 只会关心下一个任务并休眠直到它的日期(除非异步 I/O 中断它),因此调度任务本质上是 O(1)。
关于node.js - 我可以在 Node 中同时拥有多少个计划作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18869050/