【问题标题】:Node/Express: running specific CPU-instensive tasks in the backgroundNode/Express:在后台运行特定的 CPU 密集型任务
【发布时间】:2015-07-24 02:44:08
【问题描述】:

我有一个进行标准数据绑定调用的站点,但也有一些 CPU 密集型任务,每天运行几次,主要由管理员执行。

这些任务包括从数据库中获取数据、运行一些耗时的不同算法,然后重新上传数据。在不阻塞事件循环的情况下进行这些调用并让它们运行的​​最佳方法是什么?

我绝对希望将计算保留在服务器上,这样网络工作者就不会在这里工作。一个子进程在这里就足够了吗?或者我应该在后台运行一个单独的线程来处理所有/api/admin 调用?

【问题讨论】:

  • “这里有一个子进程就够了吗”可能。
  • 为什么不使用github.com/ncb000gt/node-cronnpmjs.com/package/node-cron-jobs 开始它。这样它就不会干扰您的 http 线程。
  • 我最终会将一半的管理员调用转移到 cron 作业,但仍有一半的调用需要全天手动调用。手动立即运行 cron 作业会很好吗?

标签: node.js multithreading express child-process


【解决方案1】:

这个场景在 Node.js 领域的基本答案是使用核心集群模块 - https://nodejs.org/docs/latest/api/cluster.html

这是一个可接受的 API:

  • 在同一台机器上轻松启动 worker node.js 实例(每个实例都有自己的事件循环)
  • 为实例之间的短消息保持实时通信渠道

这样,在子实例中完成的任何工作都不会阻塞您的主事件循环。

【讨论】:

  • 我想设置集群,但由于我在 heroku 上,他们说“......在大多数情况下,在标准 1x dyno 上集群多个工人会伤害,而不是提高性能。”无论如何,我都会尝试使用npmjs.com/package/forky,因为它很容易扩展。谢谢。
猜你喜欢
  • 1970-01-01
  • 2015-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-06
  • 1970-01-01
  • 2013-07-31
  • 2020-06-16
相关资源
最近更新 更多