节点js非阻塞循环

时间:2018-11-09 06:49:00

标签: node.js nonblocking

请检查我对以下for loop的理解是否正确。

for(let i=0; i<1000; i){
  sample_function(i, function(result){});
}

调用for loop的那一刻,sample_function中将排队处理event loop的1000个事件。大约5秒钟后,用户发出一个http请求,该请求在那些“ 1000个事件”之后被排队。 通常,这不是问题,因为循环是异步的。 但是,可以说此sample_function是CPU密集型功能。因此,“ 1000个事件”是连续完成的,每个过程大约需要1秒钟。 结果,for循环将阻塞大约1000秒。

有没有办法解决这样的问题?例如,是否有可能让线程每10个循环中断一次?并允许其他新查询之间弹出?如果可以,我该怎么办?

1 个答案:

答案 0 :(得分:2)

尝试一下:

 for(let i=0; i<1000; i++)
 {
    setTimeout(sample_function, 0, i, function(result){});
 }

function sample_function(elem, index){..}

var arr = Array(1000);
arr.forEach(sample_function);