Node.Js - 1 个 cpu 上有多个工作线程? (簇)

标签 node.js multithreading cluster-computing

情况如下:

我有一个带有脚本的 Node.js 服务器,该脚本需要很长时间才能完成。 该脚本获取一个 ID,在数据库中查找哪些图片属于该 ID,然后缓存这些图像,一旦所有图像都被缓存,它就完成了。

现在的问题是,可能有 2 个或更多人同时使用此功能。一旦有多个人试图获取所有这些图像,这些图像就会相互组合,A 得到 A + B 的照片,B 也得到 A + B 的照片。

现在我知道一个worker需要1个cpu。我编辑了这个,这样我就可以在 1 个 CPU 上拥有多个工作人员。但只有当 CPU 使用率非常高时,他们才会从 worker 切换。 当有人已经忙于获取这些图像,而其他人也试图获取他/她的图像时,我想更换工作人员。 (每个人的情况不同。)

如何做到这一点?因为集群只有在CPU使用率高的时候才会切换worker。还是我理解错了?

最佳答案

集群不是为此而设计的。

您使用集群来避免一个核心 100% 繁忙而其他核心几乎不做任何事情的情况 - 像这样:

您的代码中存在未正确处理并发请求的问题,而集群无法解决该问题。即使您有一个由 1000 名工作人员组成的集群,仍然可能出现当您收到 1001 个请求并且所有赌注都失败时的情况。

使用 Node 时,您始终必须考虑并发性,因为如果不这样做,您将无法使用添加集群等简单解决方案来解决问题。

您甚至没有显示一行代码,因此无法告诉您它出了什么问题,但显然存在请求处理不当的问题。也许您使用全局变量?也许您将某些状态存储在错误的范围内?您描述的情况永远不会在任何 Node 应用程序中发生,并且您所询问的解决方案无论如何都无法解决它。您需要修复您的代码。

关于Node.Js - 1 个 cpu 上有多个工作线程? (簇),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43230445/

相关文章:

javascript - promise 链中的返回值没有被调用

javascript - 无法使用 Puppeteer 通过选择器进行选择

node.js - 生成配置模板时如何处理依赖项安装?

java - 如何在本地模式下使用 Spark 来利用我的本地资源?

model-view-controller - 如何将 mongoose 与 express.js 项目集成?

Java并发: Find task failed in a pool of tasks

Java线程: Query regarding Thread waiting state

java - 嵌套同步块(synchronized block)

python - mpi4py 的 MPI 数据传输错误

user-interface - 具有集群支持的 Redis GUI 工具