nodejs中的阻塞与非堵塞的区别

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_35932345/article/details/53524873

这几天刚好在学习nodejs ,在今天实际操作时,想对堵塞和非堵塞的区别做个总结,废话不多说,直接上例子:

一下是我的目录结构:



input.txt文件:这个文件是乱打的,随便打的

wo men shi zhe yang de hua ,ni hai hui ai wo ma ?

mian.js文件堵塞:

var http = require('http');
var fs = require('fs');
var server = http.createServer(function (request, response) {

	// 发送 HTTP 头部 
	// HTTP 状态值: 200 : OK
	// 内容类型: text/plain
	response.writeHead(200, {'Content-Type': 'text/html;charset=UTF8'});
				var data = fs.readFileSync('D:/Documents/HBuilderProject/nodejs/js/input.txt');

				console.log(data.toString());
				console.log("程序执行结束!");
	// 发送响应数据 "Hello World"
	response.end('Hello World 这是我的第一个nodejs,哈哈哈\n');
});
 server.listen(8891,'127.0.0.1');
// 终端打印如下信息
console.log('Server running at http://127.0.0.1:8891/');


mian2.js文件非堵塞:

var http = require('http');
var fs = require('fs');
var server = http.createServer(function (request, response) {

	// 发送 HTTP 头部 
	// HTTP 状态值: 200 : OK
	// 内容类型: text/plain
		//response.writeHead(200, {'Content-Type': 'text/html;charset=UTF8'});
				var data = fs.readFile('D:/Documents/HBuilderProject/nodejs/js/input.txt', function (err, data){
				if (err) return console.error(err);
				console.log(data.toString());
				
	});
	console.log("程序执行结束!");
	response.end('这是测试堵塞代码实例!\n');
});


 server.listen(8892,'127.0.0.1');
// 终端打印如下信息
console.log('Server running at http://127.0.0.1:8892/');

区别一:堵塞引用的文件fs.readFileSync与非堵塞引用的文件fs.readFile.

区别二:第一个实例(堵塞)在文件(此指的是input.txt)读取完后才执行完程序。 第二个实例(非堵塞)我们呢不需要等待文件读取完,这样就可以在读取文件时同时执行接下来的代码,大大提高了程序的性能。如下图:



讲个通俗易懂的例子:

非堵塞:A去餐厅吃饭,服务员拿着菜单准备给A点菜,这时B进来,服务见看到了,这时服务员叫A先看下菜单,马上去招待B坐下让B看下要点什么菜,为B点完菜后结束后,再来为A点菜。

堵塞:必须为A服务完之后,再去服务B,大大的消耗性能


注意点:1、此几个文件都可以直接复制到直接执行此处的端口可以自己随意定。

` <nodejs是单线程的>

       2、页面的访问路径如下,您可以对比以上代码,可以得出结论:



如果大家遇到相同问题,欢迎与我交流,我的QQ:542601041,哈哈,下班!下班!

展开阅读全文

没有更多推荐了,返回首页