首頁  >  文章  >  web前端  >  一文快速了解Node.js中的事件循環

一文快速了解Node.js中的事件循環

青灯夜游
青灯夜游轉載
2021-07-05 10:58:141647瀏覽

本篇文章帶大家了解一下Node.js非同步程式設計中的事件循環。事件循環是實作Node非阻塞I/O非常重要的一環!事件循環,非阻塞I/O都是屬於LIBUV這個C 函式庫的底層能力。了解事件循環,非阻塞I/O就理解了Node的異步是怎麼運作的!

一文快速了解Node.js中的事件循環

Node 本身的執行模型-事件循環,正是它使得回呼函數十分普遍。 【推薦學習:《nodejs 教學》】

在進程啟動時,Node 就會建立一個類似while(true)的循環,每執行一次循環體的過程我們稱為Tick。每個 Tick 的過程就是查看是否有事件待處理,如果有,就取出事件及其相關的回呼 函數。如果存在關聯的回呼函數,就執行它們。然後進入下個循環,如果不再有事件處理,就退 出進程

一文快速了解Node.js中的事件循環
   Tick 流程圖

事件循環是實作 Node.js 非阻塞 I/O 非常重要的一環!事件循環,非阻塞 I/O 都是屬於 LIBUV 這個 C 函式庫的底層能力。了解 事件循環,非阻塞 I/O 就理解了 Node.js 的非同步是怎麼運作的!

透過程式碼模擬eventloop

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中文網其他相關文章!

陳述:
本文轉載於:juejin.cn。如有侵權,請聯絡admin@php.cn刪除