当我使用node.js时,我应该使用循环异步方式吗?

时间:2012-01-11 07:01:37

标签: node.js nonblocking

我正在使用express。

测试node.js

理论上,如果我在没有任何回调的“for循环”上运行非常繁重的计算,

它被阻止,其他请求应该被忽略。

但在我的情况下,定期“for loop”

for(var i=0;i<300000;i++) {
    console.log( i );
}

不会产生任何请求块,只会产生很高的CPU负载。

它也接受其他请求。

但为什么我应该使用其他一些方法来实现这些非阻塞,例如

process.nextTick()

或者node.js是否使用process.nextTick()作为默认值来处理基本循环函数(for,while)?

2 个答案:

答案 0 :(得分:2)

节点在一个带有事件循环的线程中运行,正如您所说,当您的for循环执行时,不会发生其他处理。底层操作系统TCP套接字可能很好地接受传入连接,但如果节点忙于执行循环逻辑,那么请求本身将不会被处理直到之后。

如果你绝对必须运行一个长期运行的processin节点,那么你应该使用单独的工作进程来进行计算,并让主事件循环进行请求处理。

答案 1 :(得分:0)

Node不会使用process.nextTick()包装循环。

可能是您的程序继续接受新连接,因为console.log正在将控制权交还给主事件循环;因为它是一个I / O操作。