performance - 使用集群和 node-webworker 构建高性能 node.js 应用程序

标签 performance node.js concurrency cluster-computing web-worker

我不是node.js高手,所以我想对此有更多的看法。

我正在创建一个 HTTP node.js 网络服务器,它不仅要处理大量并发连接,还要处理长时间运行的作业。默认情况下,node.js 在一个进程上运行,如果有一段代码需要很长时间才能执行,任何后续连接都必须等到代码结束它在前一个连接上所做的事情。

例如:

var http = require('http');
http.createServer(function (req, res) {

  doSomething(); // This takes a long time to execute

  // Return a response
}).listen(1337, "127.0.0.1");

所以我想使用 node-webworker 在单独的线程中运行所有长时间运行的作业图书馆:

var http = require('http');
var sys = require('sys');
var Worker = require('webworker');
http.createServer(function (req, res) {

  var w = new Worker('doSomething.js'); // This takes a long time to execute

  // Return a response
}).listen(1337, "127.0.0.1");

为了让整个事情更高效,我想也使用 cluster为每个 CPU 内核创建一个新的 Node 进程。

通过这种方式,我希望通过 cluster 的不同进程来平衡客户端连接(如果我在四核上运行它,假设有 4 个 Node 进程),然后执行长时间运行的作业使用 node-webworker 分隔线程。

这个配置有问题吗?

最佳答案

我看到这篇文章已经发布几个月了,但我想在有人出现的情况下对此发表评论。

“默认情况下,node.js 在一个进程上运行,如果有一段代码需要很长时间才能执行,任何后续连接都必须等到代码结束它在前一个连接上所做的事情。”

^-- 这并不完全正确。如果做某事();需要在发回响应之前完成,然后是,但如果不是,则可以利用 Node.js 核心中可用的异步功能,并立即返回,而此项在背景。

可以通过在您的服务器中添加以下代码来查看我正在解释的内容的快速示例:

setTimeout(function(){
    console.log("Done with 5 second item");
}, 5000);

如果您点击服务器几次,您将在客户端立即得到响应,并最终在响应发送几秒后看到控制台填满消息。

关于performance - 使用集群和 node-webworker 构建高性能 node.js 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7357310/

相关文章:

java - 使用正确的ExecutorService异步执行任务

java - 使用 ConcurrentHashMap 实现并行性

php - 前端性能问题

java - 运行时间是否与 O(nlogn) 匹配?

c - 如何优化我的代码,计算小于 200 万的所有总和

javascript - 如何将图像从 Node.js 发送到 React.js?

c# - 在 C# 中是否有更好的方法将 DateTime 舍入到最接近的 5 秒?

node.js - 即使有负载均衡器地址,gRPC 客户端也不使用 grpc-lb

javascript - 如何将十六进制缓冲区转换为十六进制数组?

ios - CoreData 异步获取导致并发调试器错误