Node.js 事件循環

Node.js事件循環web

Node.js 是單進程單線程應用程序,可是由於V8引擎提供的異步執行回調接口,經過這些接口能夠處理大量的併發,因此性能很是高。
Node.js 幾乎每個API都支持回調函數。
Node.js 基本上全部都事件機制都是經過觀察者模式實現
Node.js 單線程相似進入一個while(true)事件循環,直到沒有事件觀察者退出,每一個異步事件都生成一個事件觀察者,
若是有事件發生就調用該回調函數。併發

事件驅動程序
Node.js 使用事件驅動模型,當web server接收到請求,就把它關閉而後進行處理,而後去服務下一個web請求。異步

當這個請求完成,它被放回處理隊列,當到達隊列開頭,這個結果被返回給用戶。函數

這個模型很是高效可擴展性很是強,由於webserver一直接受請求而不等待任何讀寫操做。(這也被稱之爲非阻塞式IO或者事件驅動IO)性能

在事件驅動模型中,會生成一個主循環來監聽事件,當檢測到事件時觸發回調函數。ui

clipboard.png

//引入events
const events = require('events')
// 建立eventEmitter對象
const eventEmitter = new events.EventEmitter();

// 建立時間處理程序 
var connectHandler = function connected (){
    console.log('鏈接成功')
    // 出發data_received事件
    eventEmitter.emit('data_received')
}
// 綁定connection事件處理程序
eventEmitter.on('connection', connectHandler)

// 使用匿名函數綁定data_received事件
eventEmitter.on('data_received',() => {
    console.log('數據接收成功。')
})
// 觸發connection事件
eventEmitter.emit('connection')

console.log('程序執行完畢')

clipboard.png

Node應用程序是如何工做的 ??spa

在Node應用程序中,執行異步操做都函數將回調函數做爲最後一個參數,回調函數接收錯誤對象作一個第一個參數。線程

const fs = require("fs")

fs.readFile('input.txt',(err,data) => {
    if(err) {
        console.log(err)
    }else{
        console.log(data.toString())
    }
})
console.log("程序執行結束!")

這段代碼,input.txt文件我給刪除了,因此在執行過程當中,發生錯誤,錯誤err對象就會輸出錯誤信息。code

clipboard.png

相關文章
相關標籤/搜索