异步I/O,又称非阻塞式I/O,与你们习惯性的线性思惟相去甚远。node
同步I/O:或者叫阻塞式I/O一个线程只能处理一项任务,咱们以前的经验就是,若是用户体验卡,就粗暴简单的开多线程编程
平常线性思惟: A->B->C 等A操做I/O完成以后,才能进行B,每一个线程都是这样的
因此说单线程、非阻塞付出的成本就在编程思惟的改变。多线程
咱们在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中有一个事件队列。本质上程序的入口就是第一个事件循环的回调函数异步