node.js:回调函数
1、什么是回调?
node.js异步编程的直接体现就是回调,回调函数在完成任务后就会被回调。所以我们先来了解一下以下的内容。然后再来看回调函数。
function exam(thing) {
console.log(thing);
}
function names(callback, thing) {
thing +=' is a good name';
callback(thing);
}
names(exam, 'cheng');
这里callback是一个函数,我们把exam这个函数传进去。
2、什么是同步异步?
举个例子来说:假设你在餐馆打工,当来了一批客人时,你会在旁边等待着客人点餐,可是这次来的客人很纠结,他一直选不定菜品,你只能一直在旁边等着,这就是同步,在上一个步骤没有完成时,不能进行下一个步骤。这时,这个客人说,我们先不点餐,等选好了通知你,这时你就可以去招待别的客人,等待客人的通知。这就是异步。
同步:客户端向服务器端提交请求----等待服务器的处理----服务器处理完后返回(如果服务器处理的时间很久很久,那这个时候客户端的浏览器也只能一直等着,不能进行其他的事情)
异步:客户端向服务器端提交请求----等待服务器的处理----服务器处理完后返回(如果服务器处理的时间很久很久,那这个时候客户端的浏览器可以进行其他的事情)
同步和异步的区别:数据访问的时候,进程是否阻塞。
3、什么是IO?
IO(input、output)谁输出
4、什么是单线程/多线程?
单线程就是进程只有一个线程
多线程就是进程有多个线程。
5、什么是阻塞/非阻塞?
阻塞是按顺序执行的,非阻塞是不需要按顺序执行的。刚开始了解了同步、异步和阻塞、非阻塞之后,我认为这两个概念是相同的,但其实是不同的。
同步、异步主要针对客户端,但是也需要服务器端的配合,但不需要关心服务器端是否阻塞。阻塞、非阻塞主要针对服务器端。
阻塞与非阻塞的区别:应用程序的调用是否立即返回。
例子:
阻塞:
创建一个文件input.txt,里面的内容是:我叫程小秋
创建文件server.js
var fs = require("fs");
var data = fs.readFileSync('input.txt');
console.log(data.toString());
console.log("程序执行结束!");
结果:我叫程小秋
程序执行结束!
这个例子在文件读取完后才执行完程序
非阻塞:
创建一个文件input.txt,里面的内容是:我叫程小秋
创建文件server.js
var fs = require("fs");
fs.readFile('input.txt', function (err, data) {
if (err)
return console.error(err);
console.log(data.toString());
});
console.log("程序执行结束!");
结果:程序执行结束!
我叫程小秋
这个例子在读取文件的同时可以继续执行接下来的内容。