我记得节点的默认线程池大小是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 猜猜我是否将块调用转换为异步函数,它可以解决我的问题,我希望祈祷!
答案 0 :(得分:0)
Node将I / O任务交给操作系统处理,这些任务通常是多线程的。它采用了不必等待请求完成(通过阻塞线程)的方法,因为这浪费了时间。因此,Node放开了这些任务,只是告诉它完成时戳它。有一个很好的相关问题。
How, in general, does Node.js handle 10,000 concurrent requests?