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

这几天刚好在学习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,哈哈,下班!下班!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值