摘要:基本上所有都事件機制都是通過觀察者模式實現單線程類似進入一個事件循環,直到沒有事件觀察者退出,每個異步事件都生成一個事件觀察者,如果有事件發生就調用該回調函數。
Node.js事件循環
Node.js 是單進程單線程應用程序,但是因為V8引擎提供的異步執行回調接口,通過這些接口可以處理大量的并發,所以性能非常高。
Node.js 幾乎每一個API都支持回調函數。
Node.js 基本上所有都事件機制都是通過觀察者模式實現
Node.js 單線程類似進入一個while(true)事件循環,直到沒有事件觀察者退出,每個異步事件都生成一個事件觀察者,
如果有事件發生就調用該回調函數。
事件驅動程序
Node.js 使用事件驅動模型,當web server接收到請求,就把它關閉然后進行處理,然后去服務下一個web請求。
當這個請求完成,它被放回處理隊列,當到達隊列開頭,這個結果被返回給用戶。
這個模型非常高效可擴展性非常強,因為webserver一直接受請求而不等待任何讀寫操作。(這也被稱之為非阻塞式IO或者事件驅動IO)
在事件驅動模型中,會生成一個主循環來監聽事件,當檢測到事件時觸發回調函數。
//引入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("程序執行完畢")
Node應用程序是如何工作的 ??
在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對象就會輸出錯誤信息。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/104383.html
摘要:事件處理器,則是當指定事件觸發時,執行的一段代碼。事件循環以一個無限循環的形式啟動,存在于二進制文件里函數的最后,當沒有更多可被執行的事件處理器時,它就退出。 前言 如果你了解過Node.js,那么你一定聽說過事件循環。你一定想知道它為什么那么特殊,并且為什么你需要關注它?此時此刻的你,可能已經寫過許多基于Express.js的后端代碼,但沒有接觸到任何的循環。 在下文中,我們會先在一...
摘要:輪詢投票處理下一次處理的新事件立即設置運行通過注冊的所有回調關閉執行所有的回調工作處理延遲此度量標準測量線程池處理異步任務需要多長時間。高工作時間處理延遲表明繁忙耗盡的線程池。 原文=> What you should know to really understand the Node.js Event Loop Node.js 是一個基于事件的平臺。這就意味著在Node中發生的所...
摘要:檢索新的事件執行與相關的回調幾乎所有,除了由定時器調度的一些和將在適當的時候在這里阻塞。在事件循環的每次運行之間,檢查它是否在等待任何異步或定時器,如果沒有,則徹底關閉。 Node.js事件循環、定時器和process.nextTick() 什么是事件循環? 事件循環允許Node.js執行非阻塞I/O操作 — 盡管JavaScript是單線程的 — 通過盡可能將操作卸載到系統內核。 ...
摘要:前沿是基于引擎的運行環境具有事件驅動非阻塞等特點結合具有網絡編程文件系統等服務端的功能用庫進行異步事件處理線程的單線程含義實際上說的是執行同步代碼的主線程一個程序的啟動不止是分配了一個線程,而是我們只能在一個線程執行代碼當出現資源調用連接等 前沿 Node.js 是基于V8引擎的javascript運行環境. Node.js具有事件驅動, 非阻塞I/O等特點. 結合Node API, ...
js異步歷史 一個 JavaScript 引擎會常駐于內存中,它等待著我們把JavaScript 代碼或者函數傳遞給它執行 在 ES3 和更早的版本中,JavaScript 本身還沒有異步執行代碼的能力,引擎就把代碼直接順次執行了,異步任務都是宿主環境(瀏覽器)發起的(setTimeout、AJAX等)。 在 ES5 之后,JavaScript 引入了 Promise,這樣,不需要瀏覽器的安排,J...
摘要:的單線程,與它的用途有關。特點的顯著特點異步機制事件驅動。隊列的讀取輪詢線程,事件的消費者,的主角。它將不同的任務分配給不同的線程,形成一個事件循環,以異步的方式將任務的執行結果返回給引擎。 這兩天跟同事同事討論遇到的一個問題,js中的event loop,引出了chrome與node中運行具有setTimeout和Promise的程序時候執行結果不一樣的問題,從而引出了Nodejs的...
閱讀 3323·2021-11-25 09:43
閱讀 3008·2021-10-15 09:43
閱讀 1965·2021-09-08 09:36
閱讀 2918·2019-08-30 15:56
閱讀 742·2019-08-30 15:54
閱讀 2684·2019-08-30 15:54
閱讀 2973·2019-08-30 11:26
閱讀 1237·2019-08-29 17:27