首页 > 解决方案 > 传出请求的 Node.js 性能问题

问题描述

我记得节点的默认线程池大小是 4(或基于 cpu 计数)。这带来了我这样的问题。

对于非常基本的简化情况,我正在节点中编写一个 service1,它将请求发送到 service2,等到它完成计算然后继续。现在另一台服务器中的 service2 可以同时处理 1000 个请求,这需要时间,而且它是一个阻塞调用(这是我无法控制的)。

如果我使用 java 方式,我可以从 glassfish 创建 1000 个线程,因此可以同时处理第一个 1000 个爆炸请求。第 1001 个可能需要稍等片刻。

1000 个传入请求 -> java server1 -> 1000 个线程 -> 1000 个传出请求 -> server2

但是在 node 中,如果线程池大小为 4,因为它是一个 4 核 CPU 机器,这意味着在这种情况下 node app 会比 java 慢吗?如果我将池大小增加到 1000 会发生什么?我可以增加到1000吗?

1000 个传入请求 -> 节点 server1 -> ~4 个线程 -> 1000 个传出请求 -> server2

我没有看到一个简单的节点,或者我可以让节点处理大多数事情,对于上述阻塞调用,添加一个小型 Java 服务器并将外出请求分配给它?有什么建议吗?

更新:找到这个,我们使用 setTimeout(function(){} , 0 ); 在 JavaScript 中创建异步函数! https://medium.com/from-the-scratch/javascript-writing-your-own-non-blocking-asynchronous-functions-60091ceacc79 猜猜如果我将块调用转换为异步函数,它可以解决我的问题,我希望,祈祷!!!

标签: node.js

解决方案


Node 将其 I/O 任务交给操作系统来处理,这些任务通常是多线程的。它采用了不必等待请求完成(通过阻塞线程)的方法,因为它浪费了时间。因此,Node 将这些任务交给了它,并告诉它在完成后戳 Node。有一个很好的相关问题。

一般来说,Node.js 如何处理 10,000 个并发请求?


推荐阅读