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

来源:互联网 发布:南山软件产业基地一栋 编辑:程序博客网 时间:2024/05/17 08:47

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

0 0