Heim >Web-Frontend >js-Tutorial >Verstehen Sie in einem Artikel schnell die Ereignisschleife in Node.js

Verstehen Sie in einem Artikel schnell die Ereignisschleife in Node.js

青灯夜游
青灯夜游nach vorne
2021-07-05 10:58:141700Durchsuche

In diesem Artikel erfahren Sie mehr über die Ereignisschleife in der asynchronen Programmierung mit Node.js. Die Ereignisschleife ist ein sehr wichtiger Teil der Implementierung der nicht blockierenden E/A von Node! Ereignisschleife und nicht blockierende E/A sind die zugrunde liegenden Funktionen der C++-Bibliothek LIBUV. Sobald Sie die Ereignisschleife und die nicht blockierende E/A verstanden haben, werden Sie verstehen, wie der asynchrone Betrieb von Node funktioniert!

Verstehen Sie in einem Artikel schnell die Ereignisschleife in Node.js

Das Node-eigene Ausführungsmodell – die Ereignisschleife – ist es, was Callback-Funktionen so häufig macht. [Empfohlenes Lernen: „nodejs-Tutorial“]

Wenn der Prozess startet, erstellt Node eine Schleife ähnlich wie while(true). Jedes Mal, wenn der Schleifenkörper ausgeführt wird, wird der Prozess Häkchen. Der Prozess jedes Tick besteht darin, zu prüfen, ob ein zu verarbeitendes Ereignis vorhanden ist, und wenn ja, das Ereignis und die zugehörige Rückruffunktion abzurufen. Wenn zugehörige Callback-Funktionen vorhanden sind, werden diese ausgeführt. Geben Sie dann die nächste Schleife ein. Wenn keine weiteren Ereignisse zu verarbeiten sind, verlassen Sie den Prozesswhile(true)的循环,每执行一次循环体的过程我 们称为 Tick。每个 Tick 的过程就是查看是否有事件待处理,如果有,就取出事件及其相关的回调 函数。如果存在关联的回调函数,就执行它们。然后进入下个循环,如果不再有事件处理,就退 出进程

Verstehen Sie in einem Artikel schnell die Ereignisschleife in Node.js
   Tick 流程图

事件循环是实现 Node.js 非阻塞 I/O 非常重要的一部分! 事件循环,非阻塞 I/O 都是属于 LIBUV

Verstehen Sie in einem Artikel schnell die Ereignisschleife in Node.js
Tick-Flussdiagramm

Die Ereignisschleife ist ein sehr wichtiger Teil der Realisierung der nicht blockierenden E/A von Node.js! Ereignisschleife und nicht blockierende E/A sind die zugrunde liegenden Funktionen der C++-Bibliothek LIBUV. Sobald Sie die Ereignisschleife und nicht blockierende E/A verstanden haben, werden Sie verstehen, wie der asynchrone Betrieb von Node.js funktioniert!

Ereignisschleife durch Code simulieren

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);

Das Obige ist das einfachste Beispiel einer Ereignisschleife. Wir können ihr Nachrichten hinzufügen, und dann erkennt sie nach einer gewissen Zeit, ob es Ereignisse gibt, die nicht verarbeitet wurden. und wenn ja, wird die Ereignisverarbeitung ausgeführt

Jede Ereignisschleife ist ein neuer Aufrufstapel

Weitere Programmierkenntnisse finden Sie unter:

Programmiervideo🎜! ! 🎜

Das obige ist der detaillierte Inhalt vonVerstehen Sie in einem Artikel schnell die Ereignisschleife in Node.js. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:juejin.cn. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen