Node.js中的异步I/O

异步I/O,又称非阻塞式I/O,与你们习惯性的线性思惟相去甚远。node

同步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

事件app

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

相关文章
相关标签/搜索