首頁 > web前端 > js教程 > 主體

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

青灯夜游
發布: 2021-07-07 19:34:18
轉載
1647 人瀏覽過

本篇文章帶大家了解一下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
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板