node.js - 传出请求的 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 将其 I/O 任务交给操作系统来处理,这些任务通常是多线程的。它采用了不必等待请求完成(通过阻塞线程)的方法,因为它浪费了时间。因此,Node 将这些任务交给了它,并告诉它在完成后戳 Node。有一个很好的相关问题。
推荐阅读
- python - 在 Python 中使用替换、子字符串和查找替换字符串中的多个值
- python - 在 Azure 函数中使用 python 进行 Gremlin 操作
- python - SettingWithCopyWarning:使用 [i-1]+1 python 有条件地更新 [i]
- java - 从 java 将数据插入到 CouchDB 的分区中
- applescript - Applescript / Finder - 如何检查固定文件夹中是否存在变量文件夹
- unity3d - 如何复制原始图像的一部分
- javascript - 如何过滤对象数组的数组?
- python - 如何从多索引数据框中选择两个元素
- python - 运行 beautifulsoup 时出错(模块 'html5lib.treebuilders' 没有属性 '_base')
- android - 如何从 Kotlin 中的 lambda 函数调用 super?