当前位置: 首页 > 知识库问答 >
问题:

同时使用node.js PM2集群和node.js worker_threads模块的最有效方法是什么?

潘宝
2023-03-14

我正在使用PM2集群模块为每个CPU内核生成Node.js应用程序的实例。在sime的时候,对于CPU繁重的操作(如加密),我使用Piscina(一个用于Node.js的工作池库模块,它基于Node.js工作线程模块)。

共有1个答案

陈瀚
2023-03-14

简单的回答是肯定的,如果您使用PM2或集群模块,则存在无效的内存使用,因为它们使用进程分叉而不是利用多线程的优势。

在您的例子中,问题是工作池是在应用程序实例中创建的,这可能会导致内存使用效率低下(我认为,如果池的配置充分考虑到应用程序实例,这可能可以忽略不计)。您可以创建另一个单独的节点简单应用程序,仅用于处理加密任务,如微服务,并在运行应用程序集群之前启动它。集群工作人员可以通过某种IPC消息协议与其通信,或者更好地使用GRPC/REST。

 类似资料:
  • 我正在使用Node.js、Express和pm2构建一个用于流程管理的无状态Web应用程序。在生产环境中,我为服务器CPU的每个核心运行一个应用程序实例(感谢pm2集群模式)。 最近我开始阅读Greenlock-Express(用于自动获取证书),它还有一个“cluster”属性,如果我理解正确的话,它基本上与pm2集群模式做的事情相同。 如果我在集群模式下同时运行Greenlock-Expres

  • 问题内容: 最近,我一直在做很多模态窗口弹出窗口,而我没有使用jQuery。我用来在页面上创建新元素的方法绝大多数都是这样的: 但是,我感到这不是执行此操作的最佳或最有效的方法。从性能的角度来看,在jQuery中创建元素的最佳方法是什么? 问题答案: 我使用基准测试表明该技术是最快的。我推测这是因为jQuery不必将其标识为元素并创建元素本身。 您应该真正使用不同的Javascript引擎运行基准

  • 问题内容: 我听说过使用以下方法的建议: 从下面的评论中复制:“我正在寻找这样的语句:在MySQL和PostgreSQL中,对于短查询,count()更快,对于长查询,exist(()更快,并且在可能的情况下使用QuerySet [0]将需要第一个元素,并且您要检查它是否存在。但是,当count()更快时,它仅略微更快,因此建议在两者之间进行选择时始终使用exist()。” 问题答案: exist

  • 问题内容: 我正在Heroku上编写一个node.js应用程序,并使用pg模块。我无法弄清楚为查询数据库所需的每个请求获取客户端对象的“正确”方法。 该文档使用如下代码: 但是,您肯定不需要在使用数据库的每个函数中调用对吗?我看过其他执行此操作的代码: 我倾向于第二种选择,因为我相信Heroku的免费数据库实例无论如何都仅限于一个连接,但是以这种方式进行操作是否有任何弊端?每次使用之前,是否需要检

  • 问题内容: 目前,我的代码中有很多类似于以下内容的python对象: 现在,我想将其转换为Django模型,其中self.myName是字符串字段,而self.myFriends是字符串列表。 由于列表是python中如此常见的数据结构,因此,我希望其中有一个Django模型字段。我知道我可以使用ManyToMany或OneToMany关系,但是我希望避免代码中的额外间接访问。 问题答案: 将这种