我是靠谱客的博主 悦耳毛豆,这篇文章主要介绍Nodejs里的阻塞和非阻塞的IO、异步以及事件驱动EventEmitter处理异步,现在分享给大家,希望可以做个参考。

文章目录

    • 非阻塞I/O
      • 代码
    • Nodejs event模块处理异步
      • 1、回调函数处理异步(非阻塞)
      • 2、使用nodejs内置模块事件的驱动event来进行数据的广播和监听

非阻塞I/O

非阻塞I/O 也叫异步I/O
传统的服务器语言大多是多线程阻塞式I/O 这也是Node与众不同的地方,对于传统的服务器而言,在与用户建立连接时,每一个连接都是一个线程,当有十万个用户连接时,服务器上就会有十万个线程。而阻塞式I/O是指,当一个线程在执行I/O操作时,这个线程会阻塞,等待I/O操作完成之后继续执行。

代码

a.js

var fs=require("fs")
var data=fs.readFileSync("input.txt")
console.log(data.toString());
console.log("执行结束"); 

b.js

var fs=require("fs")
fs.readFile("input.txt",function(err,data){
if(err){
return console.error(err);
}
console.log(data.toString());
})
console.log("执行结束");

上面两个代码中,a是使用的同步I/O,也就是阻塞式I/O 因此等待文件操作结束后才继续向下执行。b中使用的就是异步I/O,也叫非阻塞式I/O,当执行文件操作时,会继续向下执行,因此先打印了执行结束

Nodejs event模块处理异步

1、回调函数处理异步(非阻塞)

var fs=require("fs");
//阻塞请求数据 等待请求完成再执行后续代码
var data=fs.readFileSync("mime.json");
console.log(data.toSrting);
//非阻塞式请求代码 nodejs中多数方法为异步请求方式
fs.readFile("mime.json",function(err,res){
if(err){
throw err;
}
console.log(res.toString());
});
console.log(1);
//处理异步请求 外边可以获取到请求的数据的方式
//1、使用回调函数来获取数据
function getMine(callback){
fs.readFile("mime.json",function(err,res){
if(err){
throw err;
}
callback(res.toString());
});
}
console.log(1);
//这样就可以在外部获取异步的数据
也可以暴露出去别的文件使用
module.exports=getMime(function(data){
console.log(data);
});

2、使用nodejs内置模块事件的驱动event来进行数据的广播和监听

var fs=require("fs");
var event=require("events");
//实例化事件的对象
var EventEmitter=new event.EventEmitter();
//使用events模块
获取异步的数据
//在请求完数据之后进行广播
fs.readFile("mime.json",function(err,res){
if(err) throw err;
EventEmitter.emit("mime",res.toString());
});
//在外部进行监听广播
EventEmitter.on("mime",function(data){
console.log(data);
});

最后

以上就是悦耳毛豆最近收集整理的关于Nodejs里的阻塞和非阻塞的IO、异步以及事件驱动EventEmitter处理异步的全部内容,更多相关Nodejs里内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部