suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Ereignisabfrage und Ausführung von asynchronem Code im Knoten

Der Hauptthread des Knotens führt JS-Code aus. Wenn es sich um eine asynchrone Operation handelt, übergibt der Knoten ihn zur Ausführung an libuv und führt dann den Code hinter der asynchronen Operation aus. Nachdem libuv ausgeführt wurde, wird es in eine kreisförmige Warteschlange gestellt. libuv verfügt über eine Ereignisschleife (Ereignisschleife), die while(true) ähnelt. Diese Ereignisschleife existiert im einzelnen Thread des Knotens (d. h. im Hauptthread). . Die Hauptthread-Schleifen Rufen Sie die Rückruffunktion für die Ereignisausführung ab.
Was ist also der Prozess, bei dem der Hauptthread eine Schleife durchläuft, um Ereignisse abzurufen und den dahinter liegenden asynchronen Code auszuführen? Es ist für einen Thread unmöglich, zwei Dinge gleichzeitig zu tun. Wird die CPU nach der Ausführung des asynchronen Codes eine Schleife ausführen, um Ereignisse abzurufen, wenn sie inaktiv ist?

世界只因有你世界只因有你2700 Tage vor852

Antworte allen(2)Ich werde antworten

  • 过去多啦不再A梦

    过去多啦不再A梦2017-07-05 10:41:22

    首先明确一点,主线程在有代码执行时是不会去轮询的。
    所以主线程会把所有的初始代码(非回调代码)执行完后再去事件队列轮询(事件队列在被轮询时可以看成一个js对象)因为理论上js引擎主线程,只能识别js代码。
    但初始代码执行完后,js主线程会去轮询取事件,当取到一个回调函数后,js引擎会把当前回调代码执行完后,才会
    在去轮询。
    总结一下就是,只有js引擎在没有代码执行时,才会去进行轮询,或者说,js主线程中永远只有一个回调函数

    Antwort
    0
  • typecho

    typecho2017-07-05 10:41:22


    觉得这篇文章能解决你的疑惑

    Antwort
    0
  • StornierenAntwort