GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Verwirrung über den internen asynchronen I/O-Mechanismus von node.js

  1. Zunächst einmal libuv hat die libeio entfernt davon. Aber es führt asynchrone Datei-E/A mit einem Thread-Pool wie libeio durch wie du schon erwähnt hast.

  2. libuv entfernt auch libev . Es führt die asynchrone Netzwerk-E/A basierend auf den asynchronen E/A-Schnittstellen in verschiedenen Plattformen aus, z. B. epoll , kqueue und IOCP , ohne Thread-Pool. Es gibt eine Ereignisschleife, die im Hauptthread von uv ausgeführt wird der die I/O-Ereignisse abfragt und verarbeitet.

  3. Der Thread-Pool in libuv ist ein Thread-Pool mit fester Größe (4 in uinx-ähnlichen Systemen). Es übernimmt eine Aufgabenwarteschlangenrolle und vermeidet die Erschöpfung der Systemressourcen, indem es Threads auf unbestimmte Zeit generiert, wenn die Anforderungen zunehmen.


Bis Version 0.6 verwendete der Knoten libev um event-loop und libeio auszuführen für asynchrone E/A (das Unix-Backend basiert stark auf diesen beiden Bibliotheken). Aber libuv hat damit begonnen, libev zu ersetzen und libeio in Version 0.8. Es führt, pflegt und verwaltet alle io und Events im Event-Pool. libuv ist die Wahl in plattformübergreifenden asynchronen IO-Bibliotheken.

  1. Ja, bis Knoten 0.6, veraltet in 0.8 und verwendet Thread-Pool
  2. Ja, aber libev verwendet keinen Thread-Pool. Siehe hier

    Klarstellung:Gemäß dem Link in der Frage, die ich gepostet habe, libeio unterstützt alle POSIX-Funktionen, die sich mit I/O befassen (einschließlich Socket). Der Autor des Knotens hat sich jedoch entschieden, ihn nur für die asynchrone Datei-E/A zu verwenden, und verwendet libev für Netzwerk-E/A. Ich weiß nicht, woher Sie es gehört haben, aber Sie können epoll für normale Dateien verwenden.

  3. libev verwendet Ereignisschleife, also hier keine Probleme.

  4. Ja, IOCP verarbeitet asynchrone E/A in Windows, der Kernel verwendet Thread-Pools.
  5. Der neue Linux-Kernel hat epoll, kqueue im neuen BSD-Kernel. libev und libeio waren für die Linux-Umgebung und bieten Event Loop/async IO für alle Kernel (unterstützt select, poll, epoll, kqueue).

Fragen aktualisieren:

  1. weiß nicht viel über libuv
  2. vielleicht genug (weiß nicht)
  3. Hier sind meine Ergebnisse zu Windows 8, die ich über den Process Explorer überprüft habe. Zeigte 4 Threads, 1 DLL, 1 Datei und 1 Abschnitt (insgesamt 7 Einträge) für einen Knotenanwendungsprozess.

  4. ps -eLf zeigt alle Threads und Prozesse an, vielleicht überfiltern Sie es, suchen Sie einfach nach der Knotenprozess-PID wie ps -eLf | grep x wobei x die PID für den Knotenprozess ist.


Linux
  1. Wie führen Sie nicht blockierende Konsolen-E/A unter Linux in C durch?

  2. Wie stoppe ich einen „unterbrechungsfreien“ Prozess unter Linux?

  3. Ports für Linux und E/A-Abschluss?

  4. Wie lösche ich Festplatten-E/A-Caches unter Linux?

  5. Debuggen der Linux-I/O-Latenz

10 Linux iostat Befehl zum Melden von CPU- und E/A-Statistiken

Wie drosselt man E/A pro Prozess auf ein maximales Limit?

Migrieren Sie auf einen Mehrzweck- oder E/A-Server

10 iozone-Beispiele für die Messung der Festplatten-E/A-Leistung unter Linux

Gibt es unter Linux wirklich keine asynchrone Block-I/O?

Was ist das Unix/Linux-Äquivalent von Registered I/O?