gpt4 book ai didi

node.js - NodeJS 多线程和大数据集

转载 作者:太空宇宙 更新时间:2023-11-04 02:17:20 25 4
gpt4 key购买 nike

我有一个示例 Node JS Express Rest 应用程序:

var express = require('express');
var logger = require('./src/logger');


var columnValue = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
var columnKey = "column";

var app = express();

var targetRecord = {};
logger.info("Creating Record...");
for (var i = 1; i <= parseInt("500"); i++) {
targetRecord[columnKey+i]=columnValue;
}
logger.info("Creating Record complete.");

logger.info("Creating payload...");
var targetPayload = {};
var test = 500
for (var i = 1; i <= test; i++) {
targetPayload["flight"+i]=targetRecord;
}
logger.info("Creating payload complete.");


/* GET home page. */
app.get('/flight', function (req, res) {
logger.info("start"+req.query.id);
if(req.query.id==2)
{
res.send("hello");
}
else {
res.send(JSON.stringify(targetPayload));
res.end();
}

logger.info("end"+req.query.id);
});

app.listen(8000, function () {
logger.info('server listening on port ' + this.address().port);
});

返回的总数据大小为28MB。

使用curl我看到以下响应时间:

  • 1 个客户端 3 秒
  • 2 个客户端均需要 6 秒
  • 4 个客户端均需要 11 秒

这是正确的吗?N 个客户端是否意味着所有客户端响应 N*3 秒?看起来有点奇怪。

我尝试通过添加 2 的 id 参数以仅返回 hello 来更改 1 个客户端的有效负载大小。

在这种情况下,id参数化的客户端会立即返回,而另一个则按照上面所述进行。

有人能够阐明我上面的示例中发生的情况吗?

最佳答案

这是 Node 领域的一个已知问题。您的 JSON.stringify() 调用是一项昂贵的同步 CPU 操作,并且 Express 会按顺序处理您的所有请求。因此,在循环被解除之前,Express 不会响应每个客户端。尝试将 stringify 调用放入 setImmediate 中以解除循环阻塞:

app.get('/flight', function (req, res) {
logger.info("start"+req.query.id);
if(req.query.id==2)
{
res.send("hello");
}
else {
setImmediate(function(){
res.send(JSON.stringify(targetPayload));
res.end();
logger.info("end"+req.query.id);
})

}


});

关于node.js - NodeJS 多线程和大数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35134956/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com