情况如下:
我有一个带有脚本的 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/