【发布时间】:2021-06-29 12:04:25
【问题描述】:
前提:我有一个类似日历的系统,允许在未来的预定时间创建/删除“事件”。最终目标是在事件开始之前和开始时执行操作(发送消息/提醒)。我进行了一些搜索并缩小到似乎是我最可行的两个选择
- Unix Cron 作业
- Bree
我不太确定哪种方法最适合我的最终目标,此外,感觉必须有一些额外的既定方法来做这样的事情,而我只是没有正确的知识,或者我完全跳过了。
我的问题:
-
如果从理论上讲,系统要处理任意大量的“事件”,而且都在未来任意时间,那么这些选项中哪一个在系统资源方面更实用?我在这方面的担忧是否有效?
-
用大量作业填充 crontab 是否有任何可预见的问题 - 或者,在 bree 的情况下,安排大量作业?
-
到目前为止,我还完全错过了一个更好的主意吗?
这主要源于 bree 使用节点“工作线程”。我对这个概念非常陌生 并且担心由于每项工作都会产生一个“工作线程”,因此我可以非常快速地捆绑所有可用线程并研磨......某事,停止。然而,这听起来有些愚蠢,可能是错误的(可能表明我在这里完全缺乏知识),因此,我的问题。
谢谢,斯塔克。
【问题讨论】:
-
对于类似日历的系统,您似乎可以查询数据库以查找下一小时内发生的所有事件,然后为每个事件创建一个
setTimeout()。然后,一个小时后,再次做同样的事情。然后,在任何服务器重新启动时,再次执行相同的操作。你真的不需要担心那些不是迫在眉睫的事件。他们可以坐在数据库中,直到他们的时间前不久。您只需要一种有效的方法来查询数据库以查找即将发生的事件并为它们设置一个计时器。 -
WorkerThreads 在 nodejs 中是相当重量级的项目,因为它们创建了一个完全独立的堆和一个全新的 V8 解释器实例。您绝对不希望每个事件都有单独的 WorkerThread。
-
@jfriend00 您对 WorkerThreads 的评论正是我所关心的,非常感谢您的确认。至于解决方案,这实际上可能非常适合我的用例。我之前一直在绞尽脑汁寻找解决方案,但还没有想出类似的方法;我想这可能正是我现在要做的。如果您想作为答案发布,请随时 & 我将其标记为已解决!
标签: node.js cron scheduled-tasks node-worker-threads