扯到IO方面,就得去了解操作系统的使用过程和方法等知识的,这边就不介绍操作系统的知识了。
首先来介绍一段Node的程序:
var fs = require(‘fs‘); fs.readFile("txt/io.txt","UTF-8",function(err,data){ if(err){ console.log(err); }else{ console.log(data); } }); console.log("读取文件完毕。。。。");
这边使用的是Node的异步IO方式,了解过异步编程的同志就知道上述输出结果是什么的了。
这边是先输出:“读取文件完毕。。。。” 然后再输出data或者err的。
过程解释如下:
首先上一张图(当然这张图是摘自书籍教程里面的)
这张图应该是很清晰的描述了Node的异步操作的,这个也是非常理想的异步IO,这边解释一下:当执行到异步调用的时候,应用程序知识通知到系统内核需要去干某件事情,然后应用程序就不管了,继续执行下面的应用操作,系统内核就去执行这么一件事情,等到内核执行完了之后,将结果返回给应用程序,这个返回的过程就称之为回调。
可能文字性的描述比较难理解,下面通过代码解释一下,(其实过程还是比较简单的)
其中:fs.readFile("txt/io.txt","UTF-8",function(err,data){
if(err){
console.log(err);
}else{
console.log(data);
}
}); 这个过程是IO操作的,Node使用了异步IO方式,程序只是通知系统内核去读取txt/io.txt这个文件,然后程序就不管了,继续执行console.log("读取文件完毕。。。。");等后面的代码,其中function(err,data){
if(err){
console.log(err);
}else{
console.log(data);
}
这个函数称之为回调函数。。
以上是异步IO的做法,肯定有同志会问,那同步的做法是怎样呢?上代码。。。
var fs = require(‘fs‘); var data = fs.readFileSync("txt/io.txt","UTF-8"); console.log(data); console.log("读取文件完毕。。。。");
使用readFileSync方法,同步操作就不存在回调的概念了。。这样就是一步一步往下执行,等fs.readFileSync("txt/io.txt","UTF-8");执行完了,再执行console.log("读取文件完毕。。。。");
意识到了 同步过程会有一个等待的过程。