传出请求的Node.js性能问题

时间:2019-04-19 18:54:59

标签: node.js

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

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

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

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

但是在节点中,如果给定它是4核CPU机器,则线程池大小为4,这意味着在这种情况下,节点应用程序将比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 猜猜我是否将块调用转换为异步函数,它可以解决我的问题,我希望祈祷!

1 个答案:

答案 0 :(得分:0)

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

How, in general, does Node.js handle 10,000 concurrent requests?