Nodejs里的阻塞和非阻塞的IO、异步以及事件驱动EventEmitter处理异步

1 篇文章 0 订阅
1 篇文章 0 订阅

非阻塞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);
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值