Node.js 在节点中处理大量任意调度的任务

Node.js 在节点中处理大量任意调度的任务,node.js,cron,scheduled-tasks,node-worker-threads,Node.js,Cron,Scheduled Tasks,Node Worker Threads,前提:我有一个类似日历的系统,允许在未来的预定时间创建/删除“事件”。最终目标是在活动开始前和开始时执行一项操作(发送消息/提醒)。我已经做了一些搜索&已经缩小到似乎是我的两个最可行的选择 Unix Cron作业 我不太确定哪种方式最适合我的最终目标,此外,我觉得必须有一些其他的既定方式来做这样的事情,我只是不知道,或者我完全跳过了 我的问题: 从理论上讲,如果系统在未来任意时间处理任意数量的“事件”,那么这些选项中哪一个更实用?我在这方面的担心是否正确 用大量作业填充crontab,

前提:我有一个类似日历的系统,允许在未来的预定时间创建/删除“事件”。最终目标是在活动开始前和开始时执行一项操作(发送消息/提醒)。我已经做了一些搜索&已经缩小到似乎是我的两个最可行的选择

  • Unix Cron作业
我不太确定哪种方式最适合我的最终目标,此外,我觉得必须有一些其他的既定方式来做这样的事情,我只是不知道,或者我完全跳过了

我的问题:

  • 从理论上讲,如果系统在未来任意时间处理任意数量的“事件”,那么这些选项中哪一个更实用?我在这方面的担心是否正确

  • 用大量作业填充crontab,或者在bree的例子中,安排大量作业,是否存在可预见的问题

  • 到目前为止,我完全错过了一个更好的主意吗

这主要源于bree对节点“工作线程”的使用。我对这个概念很不熟悉 由于每个作业都会产生一个“工作线程”,所以我会很快将所有可用线程绑定起来并进行研磨。。。某物,停下来。然而,这听起来有点愚蠢&可能是错误的(可能表明我在这里完全缺乏知识),因此,我的问题


谢谢,斯塔克。

对于类似日历的系统,您似乎可以查询数据库以查找下一个小时内发生的所有事件,然后为每个事件创建一个setTimeout()。然后,一小时后,再做同样的事情。然后,在任何服务器重新启动时,再次执行相同的操作。你真的不需要担心那些不是迫在眉睫的事情。他们可以坐在数据库中,直到他们的时间即将到来。您只需要一种高效的方法来查询数据库,以查找即将发生的事件,并为它们使用计时器


WorkerThreads在NodeJ中是相当重的项,因为它们创建了一个单独的堆和一个全新的V8解释器实例。您肯定不希望每个事件都有单独的WorkerThread



我应该补充一点,nodejs中的计时器是非常轻量级的项目,拥有大量计时器并不是问题。它们只是存储在一个已排序的链表中,随着链表变长,插入新计时器只需稍长一点的时间(在添加到链表时进行插入排序)。因为有很多计时器,所以没有连续的运行时开销。事件循环,然后只检查链接列表中的第一项,看看是否到了下一个计时器启动的时间。如果是这样,它会将其从列表的头部删除并调用其回调。如果没有,它将处理其余的事件循环工作项,并将在下一个事件循环中再次检查列表中的第一项。

对于类似日历的系统,您似乎可以查询数据库以查找下一个小时内发生的所有事件,然后为每一个事件创建
setTimeout()
。然后,一小时后,再做同样的事情。然后,在任何服务器重新启动时,再次执行相同的操作。你真的不需要担心那些不是迫在眉睫的事情。他们可以坐在数据库中,直到他们的时间即将到来。您只需要一种高效的方法来查询数据库,以查找即将发生的事件,并为其使用计时器。WorkerThread在NodeJ中是相当重要的项,因为它们创建了一个单独的堆和一个全新的V8解释器实例。您肯定不希望每个事件都有单独的WorkerThread。@jfriend00您对WorkerThreads的评论正是我所关心的,非常感谢您的确认。至于解决方案,这实际上可能非常适合我的用例。早些时候,我绞尽脑汁寻找解决方案&还没有想出类似的办法;我想这可能正是我现在要做的。如果你想发布答案,请随意&我会将其标记为已解决!非常感谢你的洞察力。再次感谢!