2014-01-21 26 views
0

(来自考试两者)经由简单的例子

setTimeout(function(){ 
console.log("A"); 
},1000); 

//Some cpu heavy calculations 
console.log("B"); 

假设CPU代码需要0.5分钟,应该怎样第一印刷Node.js的异步轻描淡写?

cpu计算必须以异步方式运行吗?或者我们不能假设? 据我了解,node.js以同步的方式运行代码,除非它具体的异步函数,我错了吗?

谢谢,并对不起,如果问题太明显...

+0

超时之外的代码应该先执行,当线程空闲时执行超时,或者在最早时间执行超时。 – adeneo

回答

3

节点是单线程。所以任何CPU密集型任务都将阻止执行。无论如何,B将在A之前打印。

一个异步函数只是延迟执行任务,直到线程稍后。举个例子:

setTimeout(function() { 
    console.log('A'); 
}, 1000); 

setTimeout(function() { 
    // CPU intensive calculations 
}, 2000); 

console.log('B'); 

你会看到什么是BA然后计算。但是每个人都在阻挡。不要混淆“异步”和“线程”。

由于底层库libuv可以以非阻塞的方式执行很多事情,因此它在后台处理线程并处理所有I/O。如果用户愿意学习如何编写利用libuv线程池的本地(即C++)模块,用户可以获得相同的结果。他们可以通过同样的非阻塞方式推迟CPU密集型工作。