当我使用node.js时,我应该使用循环asynchronous方式吗?
我用express来testingnode.js。
从理论上讲,如果我在没有任何callback的情况下对“for循环”执行一些非常繁重的计算,
它被阻塞,其他请求应该被忽略。
但就我而言,定期的“for循环”
for(var i=0;i<300000;i++) { console.log( i ); }
不做任何请求块,但只是高CPU负载。
它也接受其他请求。
但为什么我应该使用其他一些方法来使这些非阻塞如
process.nextTick()
或者,node.js是否使用process.nextTick()作为默认函数来处理基本循环函数(for,while)?
节点在一个带有事件循环的单线程中运行,正如你所说的那样,当你的for循环执行时,不会有其他的处理。 底层的操作系统TCP套接字可以很好地接受传入的连接,但是如果节点忙于循环逻辑,那么请求本身将不会被处理,直到之后。
如果您绝对必须在Node中运行一些长时间运行的stream程,那么您应该使用单独的工作进程来执行计算,并让主事件循环进行请求处理。
节点不会用process.nextTick()
包装循环。
这可能是你的程序继续接受新的连接,因为console.log
正在将控制权交还给主事件循环。 因为这是一个I / O操作。