Node.js运行在单一进程并实现了异步编码的风格,异步编码风格并不是node.js或javascript的特有的而是一种编程风格。
同步的代码意味着每次只执行一个操作,在一个操作完成之前代码的执行会被阻塞,无法移到下一个操作上。
异步的代码基于回调、允许脚本并行执行操作。脚本不用等待某个操作的结果而可以继续前行,因为操作结果会在事件发生由回调来处理。
什么是回调呢?回调是将一个函数作为参数传给另一个函数,并在通常第一函数完成被调用。
node.js实际上是基于事件回调、事件循环来实现了异步编程。使得程序员可以编写对网络或者IO事件进行相应的异步代码。
下面通过两组代码来体验同步和异步的差别:
同步:
function sleep(milliseconds) {
var start = new Date().getTime();
while ((new Date().getTime() - start) < milliseconds){
}
}
function fetchPage() {
console.log('fetching page');
sleep(2000); // simulate time to query a database
console.log('data returned from requesting page');
}
function fetchApi() {
console.log('fetching api');
sleep(2000); // simulate time to fetch from an api
console.log('d