node.js通过简单的例子进行异步低估

时间:2014-01-21 16:28:55

标签: javascript node.js asynchronous

(取自考试)

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

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

假设cpu代码花了0.5分钟,应该先打印什么?

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

谢谢,如果问题太明显,我很抱歉......

1 个答案:

答案 0 :(得分:3)

Node是单线程的。因此任何CPU密集型任务都将阻止执行。无论哪种方式,B都将在A之前打印。

异步函数只是将任务的执行延迟到线程的后面。举个例子:

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

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

console.log('B');

您将看到的是BA然后计算。但每个人都在阻止。不要将“异步”与“线程”混淆。

Node可以以非阻塞方式执行许多操作,因为底层库libuv具有线程,并在后台为您处理所有I / O.如果用户愿意学习如何编写利用libuv线程池的本机(即C ++)模块,那么用户可以获得相同的结果。他们可以用同样的非阻塞方式推迟CPU密集型工作。