Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何阻止这段昂贵的代码阻止Node.js中的其他用户请求?_Javascript_Node.js - Fatal编程技术网

Javascript 如何阻止这段昂贵的代码阻止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++) {

在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((请求、恢复、下一步)=>{
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谢谢,我会试着去做。