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中有一個事件隊列。本質上程序的入口就是第一個事件循環的回調函數異步

相關文章
相關標籤/搜索