Node.js中的异步I/O

异步I/O,又称非阻塞式I/O,与大家习惯性的线性思维相去甚远。

同步I/O:或者叫阻塞式I/O一个线程只能处理一项任务,我们之前的经验就是,如果用户体验卡,就粗暴简单的开多线程

日常线性思维:

A->B->C

等A操作I/O完成之后,才能进行B,每个线程都是这样的
  1. 异步式:非阻塞式。线程不会等待I/O操作完成,而是会吧I/O请求发给系统,继续走自己的线程。当I/O操作完成之后,操作系统会以事件的形式通知原线程,所以说异步模式下线程必须有事件循环,不断检查I/O这边的情况
  2. 面对高并发的处理:
  • 阻塞式:多线程,硬件多核CPU的利用,实际CPU的使用率并不高
  • 非阻塞式:CPU利用率一直在100%,单线程就能应对

所以说单线程、非阻塞付出的成本就在编程思维的改变。

我们在node.js中体验一下

  • 异步:
//异步读取
let fs=require('fs');
fs.readFile('app.js','utf-8',function(err,data){
if(err){
console.error(err);}
else{
console.log(data)}


});
console.log('not support Chinese');
//输出结果如下

not support Chinese

fileContent
  • 同步
//同步读取
let fs=require('fs');
let data=fs.readFileSync('app.js','utf-8');
console.log(data);
console.log('not support Chinese');
//输出结果是


data

not support Chinese

事件

刚才上面提到事件循环:在Node中有一个事件队列。本质上程序的入口就是第一个事件循环的回调函数

转载于:https://my.oschina.net/u/1031097/blog/1535937

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值