任何人都可以帮助我理解NodeJS的功能和对以下场景的性能影响。
一个。将请求发送到Rest API端点" / api / XXX"。在这个请求中,我将返回触发异步函数的响应,如下所示。
function update(req, res) {
executeUpdate(req.body); //Asynchronous function
res.send(200);
}
湾在这里,我发送响应而不等待函数完成,这个函数执行不同集合的四个mongodb更新。
问题:
正如我所读到的,NodeJS在单线程上工作,这是怎么回事 异步函数正在执行?
如果对同一个终点有多个请求,那将是怎样的 NodeJS的性能影响?
NodeJS如何处理每个的异步功能 请求,因为NodeJS在单个线程上运行,就在那里 内存问题的任何可能性?
答案 0 :(得分:0)
简而言之,这取决于你在功能中做了什么。
节点中的同步函数在主线程上执行,因此, 它们不会抢占并执行直到函数结束或直到 遇到了return语句。
另一方面,异步函数将从主线程中删除, 并且只有在完成异步任务时才会执行 单独的工人线程。
答案 1 :(得分:0)
我认为,在你的问题的答案中有两个不同的部分。
在处理#1 - 实际性能时,测试它的真正唯一方法是在代码上创建或使用测试环境。基于您正在使用的系统的基本方式,您可以查看顶部(linux)或Glances中的一些信息,这将为您提供性能的基本概念,但为了确切知道发生了什么,您将需要应用一些不同的测试环境或编写自己的测试。
接近#2 - 您不仅要了解同步和异步流程,还要了解两者的后果。这包括使用回调和承诺。 这完全取决于您尝试编码的当前进程。例如,许多Node程序员在调用MongoDB时似乎更喜欢使用promises,特别是当根据游标返回需要多个调用时。
当您使用同步或异步进程时,实际上没有书面的公式。避免回调地狱是所有Node程序员尝试做的事情。捕捉错误等是您始终需要小心的事情。正如我所说,一些程序员在处理数据返回时总会选择Promises或Async。对于某些场景,着名的Async库与Bluebird相结合是许多选择。
所有这一切,并记住你的问题是一般的,因此我的答案也是如此,以便正确地了解对你的表现,内存,cpu和速度的影响以及回报信息或传递给浏览器,最好尽可能地理解同步,异步,回调,承诺和错误捕获。您会发现某些情况非常适合同步(并且速度更快),而其他情况则需要异步和/或承诺。
希望这有所帮助。