本篇文章帶大家了解一下Node.js非同步程式設計中的事件循環。事件循環是實作Node非阻塞I/O非常重要的一環!事件循環,非阻塞I/O都是屬於LIBUV這個C 函式庫的底層能力。了解事件循環,非阻塞I/O就理解了Node的異步是怎麼運作的!
Node 本身的執行模型-事件循環,正是它使得回呼函數十分普遍。 【推薦學習:《nodejs 教學》】
在進程啟動時,Node 就會建立一個類似while(true)
的循環,每執行一次循環體的過程我們稱為Tick
。每個 Tick
的過程就是查看是否有事件待處理,如果有,就取出事件及其相關的回呼 函數。如果存在關聯的回呼函數,就執行它們。然後進入下個循環,如果不再有事件處理,就退 出進程
Tick 流程圖
事件循環是實作 Node.js 非阻塞 I/O 非常重要的一環!事件循環,非阻塞 I/O 都是屬於 LIBUV
這個 C 函式庫的底層能力。了解 事件循環,非阻塞 I/O 就理解了 Node.js 的非同步是怎麼運作的!
const eventloop = { queue: [], // 循环方法 loop() { // 不停的检测队列是否还有未循环的消息 while (this.queue.length) { const callback = this.queue.shift(); callback(); } // 执行下一次循环 // 小知识点 JS的 this绑定 setTimeout(this.loop.bind(this), 50); }, // 添加消息到队列 add(callback) { this.queue.push(callback); }, }; eventloop.loop(); setTimeout(() => { eventloop.add(() => { console.log("第一个"); }); }, 500); setTimeout(() => { eventloop.add(() => { console.log("第二个"); }); }, 800);
以上就是事件循環的一個最基本的例子, 我們可以往裡面加入訊息,然後它隔一段時間就偵測一下是否有事件沒有處理完,如果有則執行事件處理
程式設計影片! !
以上是一文快速了解Node.js中的事件循環的詳細內容。更多資訊請關注PHP中文網其他相關文章!