Node学习笔记——NodeJS的异步IO

扯到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("读取文件完毕。。。。");


意识到了 同步过程会有一个等待的过程。

Node学习笔记——NodeJS的异步IO,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。