提问人:Liu Zhang 提问时间:10/12/2023 更新时间:10/12/2023 访问量:53
防止 node.js 中事件循环阻塞的有效方法
Efficient way to prevent Event Loop Blocking in node.js
问:
我目前正在使用 Express.js 创建两个 API。两者都相对简单。第一个 API 涉及一个贯穿 1 到 3,000,000 的 for 循环。同时,第二个 API 旨在在控制台中打印一个简单的字符串。
我已经准备好并设置了所有源代码。
app.get('/firstAPI', (req, res) => {
for (let i = 1; i <= 3000000; i++) {
console.log('First API' + i + '\n');
}
});
app.get('/secondAPI', (req, res) => {
console.log('Here is the Second API');
});
但是,我遇到了障碍。如果我调用第一个 API,则需要花费大量时间才能执行。然后,尽管第二个 API 很简单,但这个冗长的过程会阻止对第二个 API 的任何调用。我怀疑这是由于 node.js 中的事件循环阻塞。
所以,我的问题是:我怎样才能规避或防止这种阻塞?
答:
0赞
Tricotou
10/12/2023
#1
如上所述,请分享您正在做的事情的示例,因为在这里您只是使用 CPU 100%,这基本上永远不会发生。另外,您甚至不响应请求,这意味着它将在客户端永久保留(至少在超时之前)
在您的代码中,只要您不 100% 加载 CPU,API 就已经是非阻塞的。例如:
app.get('/firstAPI', (req, res) => {
console.log('First API received request');
setTimeout(function(){
res.end();
console.log('First API responded to request');
}, 5000);
});
app.get('/secondAPI', (req, res) => {
console.log('Here is the Second API');
res.end();
});
在这种情况下,第一个 API 需要 5 秒才能回答,但在这 5 秒内,第二个 API 可以正常工作
评论
for