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