Javascript 如何阻止这段昂贵的代码阻止Node.js中的其他用户请求?
在node.js中Javascript 如何阻止这段昂贵的代码阻止Node.js中的其他用户请求?,javascript,node.js,Javascript,Node.js,在node.js中 app.use((req, res, next) => { setImmediate( () = { heavyTask(); }); function heavyTask(){ for (let i = 0; i < 100000; i++) { for (let i = 0; i < 100000; i++) { for (let i = 0; i < 3; i++) {
app.use((req, res, next) => {
setImmediate( () = {
heavyTask();
});
function heavyTask(){
for (let i = 0; i < 100000; i++) {
for (let i = 0; i < 100000; i++) {
for (let i = 0; i < 3; i++) {
}
}
}
}
});
app.use((请求、恢复、下一步)=>{
setImmediate(()={
重任务();
});
函数重任务(){
for(设i=0;i<100000;i++){
for(设i=0;i<100000;i++){
for(设i=0;i<3;i++){
}
}
}
}
});
我在本地开发中设置了2个用户(userA,userB)。每当我使用userA触发此函数时,像userB这样的其他用户都必须排队等待,尽管这些用户执行的任务比较简单,只需要几毫秒。我对setImmediate肯定有些误解。我认为它应该防止阻塞事件循环,这样当其他用户进行昂贵的计算时,其他用户就不必排队等候了
我要寻找的答案是,举例来说,使用上面的代码。是否有帮助:您可以使其异步。我还想问一下嵌套for循环在做什么?可能还有优化的空间。
setImmediate
将允许在此任务之前执行其他任务,但一旦此任务运行,它仍会阻塞线程。如果要运行这样的程序,那么最多只能让每个迭代的逻辑在setImmediate
/setTimeout
中运行。在这种情况下,heavyTask
仍需要大约相同的处理时间,但如果出现另一个任务,它不会被阻止:不同的任务被放入队列->heavyTask
将完成当前迭代并将下一个迭代放入队列->不同的任务被拾取并处理->heavyTask
再次进入队列。@vivek_23这是一个基于玩家输入计算结果并发送的游戏事件返回为json对象。所有计算均在函数内完成。它混合了for循环和数学计算。我会在下一次测试中尝试使用promise,如果它有效的话。@VLAZ谢谢,我会尝试使用它。这有帮助吗:嗯,你可以让它异步。我还想问一下嵌套for循环在做什么?可能还有优化的空间。setImmediate
将允许在此任务之前执行其他任务,但一旦此任务运行,它仍会阻塞线程。如果要运行这样的程序,那么最多只能让每个迭代的逻辑在setImmediate
/setTimeout
中运行。在这种情况下,heavyTask
仍需要大约相同的处理时间,但如果出现另一个任务,它不会被阻止:不同的任务被放入队列->heavyTask
将完成当前迭代并将下一个迭代放入队列->不同的任务被拾取并处理->heavyTask
再次进入队列。@vivek_23这是一个基于玩家输入计算结果并发送的游戏事件返回为json对象。所有计算均在函数内完成。它混合了for循环和数学计算。我会在下一次测试中试着去做承诺,如果它行得通的话。@VLAZ谢谢,我会试着去做。