节点js非阻塞for循环
node js non blocking for loop
请检查我对以下for loop
的理解是否正确。
for(let i=0; i<1000; i){
sample_function(i, function(result){});
}
调用for loop
的那一刻,sample_function
的1000个事件将在event loop
中被查询。大约 5 秒后,用户发出了一个 http 请求,该请求在那些“1000 个事件”之后被查询。
通常这不会成为问题,因为循环是异步的。
但是可以说这个 sample_function
是一个 CPU 密集函数。因此,“1000 个事件”是连续完成的,每个事件大约需要 1 秒。
因此,for 循环将阻塞大约 1000 秒。
有没有办法解决这样的问题?例如,是否可以让线程每 10 次循环执行一次 "break"?并允许其他新问题出现在两者之间?如果可以,我该怎么做?
试试这个:
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);
请检查我对以下for loop
的理解是否正确。
for(let i=0; i<1000; i){
sample_function(i, function(result){});
}
调用for loop
的那一刻,sample_function
的1000个事件将在event loop
中被查询。大约 5 秒后,用户发出了一个 http 请求,该请求在那些“1000 个事件”之后被查询。
通常这不会成为问题,因为循环是异步的。
但是可以说这个 sample_function
是一个 CPU 密集函数。因此,“1000 个事件”是连续完成的,每个事件大约需要 1 秒。
因此,for 循环将阻塞大约 1000 秒。
有没有办法解决这样的问题?例如,是否可以让线程每 10 次循环执行一次 "break"?并允许其他新问题出现在两者之间?如果可以,我该怎么做?
试试这个:
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);