首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Node JS迭代导致API变慢

使用Node JS迭代导致API变慢
EN

Stack Overflow用户
提问于 2016-12-12 00:56:16
回答 2查看 507关注 0票数 1

我使用Node js来创建REST API。

在我的场景中,我有两个API。

API 1 -->必须获取10,000条记录并进行迭代以修改某些数据

API 2:简单的get方法。

当我打开post man并点击第一个API和第二个API时,因为Node JS是单线程的,这导致第二个API获得响应的速度较慢。

我的期望是:即使第一个API获得了时间,它也不应该在很长时间内成为第二个API。

从Node JS文档中,我发现了集群的概念。https://nodejs.org/dist/latest-v6.x/docs/api/cluster.html,所以我实现了集群,它创建了4个服务器实例。现在我在一个选项卡中点击API 1,在第二个选项卡中点击API 2,它工作得很好。但是当我在4个选项卡中打开API1,并再次打开第5个选项卡时,API2再次导致速度变慢。

解决这个问题的最佳解决方案是什么?

EN

回答 2

Stack Overflow用户

发布于 2016-12-12 01:26:44

由于node.js的单线程特性,确保您的服务器始终响应您为API2描述的快速请求的唯一方法是确保您的服务器中永远不会有任何长时间运行的操作。

当您在代码中遇到需要一段时间才能运行并会影响服务器响应性的操作时,您的选择如下所示:

启动一个新的进程,并在另一个进程中运行

  1. Move操作。这允许您的服务器进程保持活动并响应其他请求,即使长时间运行的其他进程仍在其data.
  2. Start上运行足够多的集群。使用您研究过的集群,启动的集群比您预期的对长时间运行的进程的并发调用更多。这允许始终至少有一个集群进程可用于响应。有时,您无法预测这将有多少,或者它将超过您实际上可以create.
  3. Redesign您的长时间运行的进程在块中执行它的工作,在块之间返回控制给系统,以便node.js可以交错它正在尝试与长时间运行的工作的其他工作。这是an example of processing a large array in chunks。这篇文章是为浏览器写的,但是不阻塞事件循环太长时间的概念在node.js.
  4. Speed long running任务中是相同的。找到了一种方法来加速长时间运行的作业,这样它就不会花费太长的时间(使用缓存,而不是一次返回太多结果,更快的方法来完成它,etc...).
  5. Create N个工作进程(可能比你拥有的CPU数量少一个工作进程),并为长时间运行的任务创建一个工作队列。然后,当长时间运行的请求进入时,将其插入到工作队列中。然后,每个工作进程都可以自由地处理队列中的项目。当请求超过N个长任务时,第一个任务将立即处理,后面的任务将在队列中等待,直到有工作进程可用来处理它们。但是,最重要的是,您的主node.js进程将保持自由并响应常规请求。

最后一个选项是最简单的,因为它对任何数量的长时间运行的请求都是有效的,尽管所有的方案都可以帮助您。

票数 1
EN

Stack Overflow用户

发布于 2016-12-12 01:26:37

Node.js实际上不是多线程的,所以所有这些请求都是在单个线程的事件循环中处理的。

每个Node.js进程在单个线程中运行,默认情况下,它在32位系统上的内存限制为512MB,在64位系统上的内存限制为1 1GB。

但是,您可以将单个进程拆分为多个进程或工作进程。这可以通过集群模块来实现。集群模块允许您创建子进程(工作进程),子进程与主节点进程共享(或不共享)所有服务器端口。

您可以在应用程序中直接调用集群API,也可以在API上使用多个抽象之一

https://nodejs.org/api/cluster.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41088653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档