(取自考试)
setTimeout(function(){
console.log("A");
},1000);
//Some cpu heavy calculations
console.log("B");
假设cpu代码花了0.5分钟,应该先打印什么?
cpu计算必须以异步方式运行吗?或者我们不能假设? 据我所知,node.js以同步方式运行代码,除非它有特定的异步函数,我错了吗?
谢谢,如果问题太明显,我很抱歉......
答案 0 :(得分:3)
Node是单线程的。因此任何CPU密集型任务都将阻止执行。无论哪种方式,B
都将在A
之前打印。
异步函数只是将任务的执行延迟到线程的后面。举个例子:
setTimeout(function() {
console.log('A');
}, 1000);
setTimeout(function() {
// CPU intensive calculations
}, 2000);
console.log('B');
您将看到的是B
,A
然后计算。但每个人都在阻止。不要将“异步”与“线程”混淆。
Node可以以非阻塞方式执行许多操作,因为底层库libuv具有线程,并在后台为您处理所有I / O.如果用户愿意学习如何编写利用libuv线程池的本机(即C ++)模块,那么用户可以获得相同的结果。他们可以用同样的非阻塞方式推迟CPU密集型工作。