Heim Web-Frontend js-Tutorial Node erklärt die Prozessanalyse der Ausführung von js

Node erklärt die Prozessanalyse der Ausführung von js

Apr 03, 2018 pm 02:41 PM
javascript node 分析

Der Inhalt dieses Artikels besteht darin, Ihnen die Analyse des Prozesses der Knotenerklärung und -ausführung von js mitzuteilen. Interessierte Freunde können einen Blick darauf werfen, und Freunde in Not können sich auch darauf beziehen

Erklärung : Knoten ist Single-Threaded, ereignisgesteuert (ähnlich wie udev-Ereignisse im Kernel, Sie können sich auf den Listening-Callback-Mechanismus beziehen)

Nehmen Sie hauptsächlich node-v8.10.0 als Objekt src/node_main.cc und src/node.cc Dokument.

  1. Entrance
    node-v8.10.0/src/node_main.cc --> 90 int main(int argc, char *argv[])
    Call node::Start( argc, argv);
    node-v8.10.0/src/node.cc --> 4863 int Start(int argc, char** argv)
    a: 4864 atexit([] () { uv_tty_reset_mode( ); });
    # Führen Sie die anonyme Funktion nach der Ausführung von *.js aus, die tatsächlich uv_tty_reset_mode() ausführt.
    b: 4865 PlatformInit();
    # Führen Sie die Inline-Funktion PlatformInit() aus, signalisieren Sie Volume Verarbeitung der Funktionsregistrierung
    c: 4866 node::performance::performance_node_start = PERFORMANCE_NOW();
    Kapselung der uv_hrtime-Funktion: src/node_perf_common.h:13:#define PERFORMANCE_NOW() uv_hrtime()
    Exportdefinition: deps/uv/include/uv.h:1457:UV_EXTERN uint64_t uv_hrtime(void);
    Implementierung: deps/uv/src/unix/core.c:111:uint64_t uv_hrtime(void)
    uv_hrtime ruft uv__hrtime Definition: deps/uv/src/unix/internal.h:252:uint64_t uv__hrtime(uv_clocktype_t type);
    Implementierung: deps/uv/src/unix/linux-core.c:442:uint64_t uv__hrtime( UV_ClockType_t Typ) {
    Kurz gesagt: Notieren Sie den Startzeitpunkt der Knotenausführung*.js-Skript. Zeichnen Sie ähnlich den Startzeitpunkt des V8 auf:
    4903 node :: performance :: Performance_v8_Start = Performance_now (); d: 4868 CHECK_GT(argc, 0);
    src/util.h:129:#define CHECK_GT(a, b) CHECK((a) > (b))
    e : 4871 argv = uv_setup_args (argc, argv);
    Definition: DEPS/UV/Include/UV.H: 1051: UV_EXTERN CHAR ** UV_Setup_ARGS (InT ARGC, CHAR ** ARGV); 877 Init(&argc, const_cast< const char**>(argv), &exec_argc, &exec_argv);
    4542 void Init(int* argc,
    4543 const char** argv,
    4544 int* exec_argc,
    4545 const char *** exec_argv) {
    4617 ProcessArgv(argc, argv, exec_argc, exec_argv);
    4502 ParseArgs(arg c, argv, exec_argc, exec_argv, &v8_argc, &v8_argv, is_env);
    4015 static void. Parse Argumente (int* argc,
    Parse-Parameter
    g: OpenSSL-bezogene Konfiguration
    h: 4895 v8_platform.Initialize(v8_thread_pool_size, uv_default_loop());
    i: 4902 V8::Initialize ();
    v8-Initialisierung
    j: 4905 const int exit_code =
    4906 Start(uv_default_loop(), argc, argv, exec_argc, exec_argv);
    k: Exit
    4908 v8_platform.StopTracingAgent ();
    4910 v8_initialized = false;
    4911 V8::Dispose();
    4919 v8_platform.Dispose();
    4921 delete[] exec_argv;
    4922 exec_argv = nullptr;
    4924 return exit_code ;
    2. Analyse von Teil j in 1
    a: 4814 inline int Start(uv_loop_t* event_loop,
    4815 int argc, const char* const* argv,
              4816 &   ner(OnMessage);
              4829   isolieren- >SetAbortOnUncaughtExceptionCallback(ShouldAbortOnUncaughtException);
              4830   Isolate->SetAutorunMicrotasks(false);
              4831   Isolate->SetFatalErrorHandler(OnFatalError);
               new Isolate对象,并设置相关参数.
          c: 4843   int exit_code;
              4844   {
              4845     Locker locker(isolate);
              4846     Isolate::Scope isolate_scope(isolate);
             4847     HandleScope handle_scope(isolate);
              4848     IsolateData isolate_data(isolate , event_loop, allocator.zero_fill_field());
              4849     exit_code = Start(isolate, &isolate_data, argc, argv, exec_argc, exec_argv);
              4850   }
                准备开始执行的参数,isolate对象.
          d:  4745 inline int Start(Isolate* isolate, IsolateData* isolate_data,
              4746                 int argc, const char* const* argv,
              4747                  int exec_argc, const char* const* exec_argv) {
          e:环境准备
                4748   HandleScope handle_scope(isolate);
                4749   Local context = Context::New(isolate);
                4750   Context::Scope context_scope(context);
                4751   Environment env(isolate_data, context);
                4754   env.Start(argc, argv, exec_ argc, exec_argv , v8_is_profiling) v
          f:  在d中的函数里面进行eventloop,没有event的时候,就会退出node

    3.  分析核心部分
            4777   {
            4778     SealHandleScope seal(isolate);
            4779     bool more;
            4780 PERFORMANCE_MARK(&env, LOOP_START);
            4781     do {
            4782       uv_run(env.event_loop(), UV_RUN_DEFAULT);
            4783
            4784       v8_platform.DrainVMTasks();
            4785
            4786 more = uv_loop_alive(env.event_loop());
            4787       if (more)
            4788         continue;
            4789
            4790      Exit(&env);
            4791
            4792       // Emit ` beforeExit`, wenn die Schleife entweder nach der Ausgabe aktiv wurde
    4793 // Ereignis oder nach dem Ausführen einiger Rückrufe.
    4794 more = uv_loop_alive(env.event_loop()); // Ermitteln Sie erneut, ob es Ereignisse gibt, die nicht verarbeitet wurden. Einige asynchrone Vorgänge verfügen möglicherweise über Rückruffunktionen.
    4795 } while (more == true);
    4796 PERFORMANCE_MARK(&env, LOOP_EXIT); // Wenn keine Ereignisverarbeitung erfolgt, beenden.
    4797 🎜> a: Die Kernfunktion uv_run zur Verarbeitung von Ereignissen
    Deklaration: deps/uv/include/uv.h:281:UV_EXTERN int uv_run(uv_loop_t*, uv_run_mode mode);
    Implementierung: de PS /uv/src/unix/core.c:348:int uv_run(uv_loop_t* loop, uv_run_mode mode) {
    b: Bestimmen Sie, ob sich die Schleife im aktiven Zustand befindet: ob ein Handle vorhanden ist, Anforderungssignal und der Griff ist nicht geschlossen.
    343 int uv_loop_alive(const uv_loop_t* loop) {
    344 return uv__loop_alive(loop);
    345 }
    336 static int uv__loop_alive( const uv_loop_t* loop) {
    337 return uv__has_active_handles(loop ) ||
    338 uv__has_active_reqs(loop) ||
    339 loop->closing_handles != NULL;
    340 }
    c: uv__has_active_handles(loop):
    deps/uv/src/ uv-common.h: 145: #define uv__has_active_handles (Loop)
    129 #define UV__Has_Active_Reqs (Loop)) == 0)




Das obige ist der detaillierte Inhalt vonNode erklärt die Prozessanalyse der Ausführung von js. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

WebSocket und JavaScript: Schlüsseltechnologien zur Implementierung von Echtzeitüberwachungssystemen WebSocket und JavaScript: Schlüsseltechnologien zur Implementierung von Echtzeitüberwachungssystemen Dec 17, 2023 pm 05:30 PM

WebSocket und JavaScript: Schlüsseltechnologien zur Realisierung von Echtzeit-Überwachungssystemen Einführung: Mit der rasanten Entwicklung der Internet-Technologie wurden Echtzeit-Überwachungssysteme in verschiedenen Bereichen weit verbreitet eingesetzt. Eine der Schlüsseltechnologien zur Erzielung einer Echtzeitüberwachung ist die Kombination von WebSocket und JavaScript. In diesem Artikel wird die Anwendung von WebSocket und JavaScript in Echtzeitüberwachungssystemen vorgestellt, Codebeispiele gegeben und deren Implementierungsprinzipien ausführlich erläutert. 1. WebSocket-Technologie

PI -Knotenunterricht: Was ist ein PI -Knoten? Wie installiere und richte ich einen PI -Knoten ein? PI -Knotenunterricht: Was ist ein PI -Knoten? Wie installiere und richte ich einen PI -Knoten ein? Mar 05, 2025 pm 05:57 PM

Detaillierte Erläuterungs- und Installationshandbuch für Pinetwork -Knoten In diesem Artikel wird das Pinetwork -Ökosystem im Detail vorgestellt - PI -Knoten, eine Schlüsselrolle im Pinetwork -Ökosystem und vollständige Schritte für die Installation und Konfiguration. Nach dem Start des Pinetwork -Blockchain -Testnetzes sind PI -Knoten zu einem wichtigen Bestandteil vieler Pioniere geworden, die aktiv an den Tests teilnehmen und sich auf die bevorstehende Hauptnetzwerkveröffentlichung vorbereiten. Wenn Sie Pinetwork noch nicht kennen, wenden Sie sich bitte an was Picoin ist? Was ist der Preis für die Auflistung? PI -Nutzung, Bergbau und Sicherheitsanalyse. Was ist Pinetwork? Das Pinetwork -Projekt begann 2019 und besitzt seine exklusive Kryptowährung PI -Münze. Das Projekt zielt darauf ab, eine zu erstellen, an der jeder teilnehmen kann

JavaScript und WebSocket: Aufbau eines effizienten Echtzeit-Wettervorhersagesystems JavaScript und WebSocket: Aufbau eines effizienten Echtzeit-Wettervorhersagesystems Dec 17, 2023 pm 05:13 PM

JavaScript und WebSocket: Aufbau eines effizienten Echtzeit-Wettervorhersagesystems Einführung: Heutzutage ist die Genauigkeit von Wettervorhersagen für das tägliche Leben und die Entscheidungsfindung von großer Bedeutung. Mit der Weiterentwicklung der Technologie können wir genauere und zuverlässigere Wettervorhersagen liefern, indem wir Wetterdaten in Echtzeit erhalten. In diesem Artikel erfahren Sie, wie Sie mit JavaScript und WebSocket-Technologie ein effizientes Echtzeit-Wettervorhersagesystem aufbauen. In diesem Artikel wird der Implementierungsprozess anhand spezifischer Codebeispiele demonstriert. Wir

Einfaches JavaScript-Tutorial: So erhalten Sie den HTTP-Statuscode Einfaches JavaScript-Tutorial: So erhalten Sie den HTTP-Statuscode Jan 05, 2024 pm 06:08 PM

JavaScript-Tutorial: So erhalten Sie HTTP-Statuscode. Es sind spezifische Codebeispiele erforderlich. Vorwort: Bei der Webentwicklung ist häufig die Dateninteraktion mit dem Server erforderlich. Bei der Kommunikation mit dem Server müssen wir häufig den zurückgegebenen HTTP-Statuscode abrufen, um festzustellen, ob der Vorgang erfolgreich ist, und die entsprechende Verarbeitung basierend auf verschiedenen Statuscodes durchführen. In diesem Artikel erfahren Sie, wie Sie mit JavaScript HTTP-Statuscodes abrufen und einige praktische Codebeispiele bereitstellen. Verwenden von XMLHttpRequest

Analyse der Gründe, warum das sekundäre Verzeichnis von DreamWeaver CMS nicht geöffnet werden kann Analyse der Gründe, warum das sekundäre Verzeichnis von DreamWeaver CMS nicht geöffnet werden kann Mar 13, 2024 pm 06:24 PM

Titel: Analyse der Gründe und Lösungen, warum das sekundäre Verzeichnis von DreamWeaver CMS nicht geöffnet werden kann. Dreamweaver CMS (DedeCMS) ist ein leistungsstarkes Open-Source-Content-Management-System, das häufig bei der Erstellung verschiedener Websites verwendet wird. Allerdings kann es beim Erstellen einer Website manchmal vorkommen, dass das sekundäre Verzeichnis nicht geöffnet werden kann, was zu Problemen beim normalen Betrieb der Website führt. In diesem Artikel analysieren wir die möglichen Gründe, warum das sekundäre Verzeichnis nicht geöffnet werden kann, und stellen spezifische Codebeispiele zur Lösung dieses Problems bereit. 1. Mögliche Ursachenanalyse: Pseudostatisches Regelkonfigurationsproblem: während der Verwendung

So erhalten Sie auf einfache Weise HTTP-Statuscode in JavaScript So erhalten Sie auf einfache Weise HTTP-Statuscode in JavaScript Jan 05, 2024 pm 01:37 PM

Einführung in die Methode zum Abrufen des HTTP-Statuscodes in JavaScript: Bei der Front-End-Entwicklung müssen wir uns häufig mit der Interaktion mit der Back-End-Schnittstelle befassen, und der HTTP-Statuscode ist ein sehr wichtiger Teil davon. Das Verstehen und Abrufen von HTTP-Statuscodes hilft uns, die von der Schnittstelle zurückgegebenen Daten besser zu verarbeiten. In diesem Artikel wird erläutert, wie Sie mithilfe von JavaScript HTTP-Statuscodes erhalten, und es werden spezifische Codebeispiele bereitgestellt. 1. Was ist ein HTTP-Statuscode? HTTP-Statuscode bedeutet, dass der Dienst den Dienst anfordert, wenn er eine Anfrage an den Server initiiert

Analysieren Sie, ob die Hauptprogrammiersprache von Tencent Go ist Analysieren Sie, ob die Hauptprogrammiersprache von Tencent Go ist Mar 27, 2024 pm 04:21 PM

Titel: Ist Tencents wichtigste Programmiersprache Go: Eine eingehende Analyse Als Chinas führendes Technologieunternehmen hat Tencent bei der Auswahl seiner Programmiersprachen schon immer große Aufmerksamkeit auf sich gezogen. In den letzten Jahren glauben einige Leute, dass Tencent hauptsächlich Go als Hauptprogrammiersprache übernommen hat. In diesem Artikel wird eine eingehende Analyse durchgeführt, ob die Hauptprogrammiersprache von Tencent Go ist, und es werden konkrete Codebeispiele angegeben, um diese Ansicht zu untermauern. 1. Anwendung der Go-Sprache in Tencent Go ist eine von Google entwickelte Open-Source-Programmiersprache. Viele Entwickler schätzen ihre Effizienz, Parallelität und Einfachheit.

Analysieren Sie die Vor- und Nachteile der statischen Positionierungstechnologie Analysieren Sie die Vor- und Nachteile der statischen Positionierungstechnologie Jan 18, 2024 am 11:16 AM

Analyse der Vorteile und Grenzen der statischen Positionierungstechnologie Mit der Entwicklung moderner Wissenschaft und Technologie ist die Positionierungstechnologie zu einem unverzichtbaren Bestandteil unseres Lebens geworden. Als eine davon hat die statische Positionierungstechnologie ihre einzigartigen Vorteile und Grenzen. In diesem Artikel wird eine eingehende Analyse der statischen Positionierungstechnologie durchgeführt, um ihren aktuellen Anwendungsstatus und zukünftige Entwicklungstrends besser zu verstehen. Werfen wir zunächst einen Blick auf die Vorteile der statischen Positionierungstechnologie. Die statische Positionierungstechnologie erreicht die Bestimmung von Positionsinformationen durch Beobachtung, Messung und Berechnung des zu positionierenden Objekts. Im Vergleich zu anderen Positionierungstechnologien

See all articles