" bull"利用多核作为node.js运行单线程

时间:2017-11-28 18:06:41

标签: node.js multithreading

根据此包https://github.com/OptimalBits/bull#documentation

  

过程功能也可以在单独的过程中运行。这有几个好处:

     
      
  • 该过程是沙箱,所以如果它崩溃它不会影响   工人。
  •   
  • 您可以在不影响队列的情况下运行阻止代码(作业不会   失速)。
  •   
  • 更好地利用多核CPU。
  •   
  • 减少与redis的联系。
  •   
     

要使用此功能,只需使用处理器创建单独的文件。   (..)这是运行阻止代码的完美方式。

我的问题是:

但是,Bull会自动使用多核CPU,因为node.js在单线程上运行。 如果是的话,确实利用Bullore的多核运行大量mongodb更新等后台任务(更新我的用户配置文件 - avatar将在req / res循环中运行,其中许多参考文档的更新就像在友谊中一样集合应该在后台运行)这可能需要几分钟或几小时,因此用户甚至不会注意到网络的所有用户看到新头像需要几分钟甚至几小时。或者它们是否意味着阻塞代码,代码阻塞事件循环,如cpu繁重的任务,而不是I / O操作,如数据库查询。

我很感激有关的所有信息。

1 个答案:

答案 0 :(得分:2)

Bull只是node.js的库,它不会改变node.js在单个线程上运行的事实。所以你不能指望Bull解决你的单线程问题,但Bull可以帮助你解决这个问题。

  1. Bull可以生成子进程(每个作业的沙盒进程)
  2. 是的,在自己的应用程序/流程中运行繁重的任务是有意义的。您可以为您的任务创建微服务,也可以在Bull公司生成的子进程中运行后台任务。
  3. 我不明白你的其余问题(从谈到大量的mongodb查询开始)。

    附注:您通常希望避免MongoDB中的引用。 MongoDB查询通常非常繁重和/或很慢。相反,您希望对数据进行非规范化,即使这会导致重复存储的数据。