Kurz gesagt: Ist Nodejs Single-Threaded? Parallelität vs. Parallelität
Sie werden online viele verschiedene „Meinungen“ finden, was dazu führt, dass einige von ihnen falsch sind! Ich hatte sogar Interviewer, die mir solche Fragen stellten und meine Antwort für falsch hielten, obwohl ich eigentlich Recht hatte!
Um es kurz zu machen, zuerst müssen wir den Unterschied zwischen Nebenläufigkeit und Parallelität kennen.
Für diesen „kurzen“ Artikel definieren wir Folgendes:
- Parallelität: Threads konkurrieren (verwaltet von der CPU oder von der Software selbst) um CPU-Zeit; Die CPU verarbeitet jeweils nur einen Thread, wechselt jedoch zwischen den Threads (möglicherweise mit hoher Frequenz), wodurch die Illusion von Parallelität entsteht und definitiv nicht darauf gewartet wird, dass eine ganze Aufgabe abgeschlossen wird, bevor die nächste ausgeführt wird.
- Parallelität: Threads, die auf verschiedenen Kernen der CPU laufen; Die CPU führt beide Threads gleichzeitig aus und somit laufen sie gleichzeitig.
Davon abgesehen verwendet nodejs eine Javascript-Ereignisschleife (Single-Threaded, dasselbe wie Javascript, aber gleichzeitig), um Anfragen zu verwalten, aber Single-Threading-ness gilt nur für den Manager der Anfragen, was nicht unbedingt im Fall der Erfüllung von gilt jede Anfrage.
Wie kann die zugrunde liegende Funktionalität parallel sein, wenn Javascript selbst und die Ereignisschleife Singlethreading sind? Zwei Gründe:
1- Libuv-Bibliothek, die io-Operationen parallel mit C++-basiertem Code ausführt
2- Worker-Threads, die in Node v10 eingeführt wurden und im Grunde eine v8-Engine für jeden Thread hervorbringen; Das bedeutet, dass wir mehrere Threads haben, jeder mit seiner eigenen Ereignisschleife, und sie können möglicherweise gleichzeitig ausgeführt werden.
Die wichtige Erkenntnis hier ist, dass sich die Verwendung eines gleichzeitigen Modells für das Einreihen von Anfragen (z. B. die Verwendung der Ereignisschleife in nodejs) im großen Maßstab als effizienter erwiesen hat als das parallele Einreihen von Anfragen (z. B. das Erzeugen eines neuen Prozesses pro Anfrage, z. PHP) aufgrund des geringeren Arbeitsspeicher- und Threadverwaltungsaufwands pro Anfrage.
Nun, da wir wissen, dass Javascript Single-Threaded ist, aber nodejs Multi-Threaded ist; Ist Python Single- oder Multi-Threaded? Lassen Sie es mich in den Kommentaren wissen, vielleicht haben wir noch eine weitere kurze Lektüre darüber!
Weiterlesen:
- ausgezeichnetes praktisches Beispiel mit einem Benchmark (nodejs):
https:///softup-technologies/node-js-internals-not-everything-happens-on-the-thread-pool-a14d0a286efb - die Ereignisschleife:
https://www.freecodecamp.org/news/javascript-concurrency-model-and-event-loop/ - nodejs Worker-Threads:
https://www.simplilearn.com/tutorials/nodejs-tutorial/nodejs-worker-threads - php-Prozess/Thread pro Anfrage:
https://stackoverflow.com/questions/5171639/creation-of-new-process-for-each-request-of-web-page - Fadenbild:
https://www.hunarcourses.com/blog/wp-content/uploads/2019/04/5-Types-Of-Threads-Used-In-Garment-Making.jpg

![Was ist überhaupt eine verknüpfte Liste? [Teil 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































