In PHP- (oder Java / ASP.NET / Ruby-) Webservern wird jede Clientanforderung in einem neuen Thread instanziiert. Aber in Node.js laufen alle Clients auf demselben Thread (sie können sogar dieselben Variablen gemeinsam nutzen!). Ich verstehe, dass E / A-Operationen ereignisbasiert sind, sodass sie die Haupt-Thread-Schleife nicht blockieren.
Was ich nicht verstehe ist, WARUM der Autor von Node es als Single-Thread ausgewählt hat? Das macht es schwierig. Zum Beispiel kann ich keine CPU-intensive Funktion ausführen, da sie den Hauptthread blockiert (und neue Clientanforderungen blockiert werden), sodass ich einen Prozess erzeugen muss (was bedeutet, dass ich eine separate JavaScript-Datei erstellen und einen anderen Knotenprozess ausführen muss es). In PHP-CPU blockieren intensive Aufgaben jedoch keine anderen Clients, da sich, wie bereits erwähnt, jeder Client in einem anderen Thread befindet. Was sind die Vorteile gegenüber Multithread-Webservern?
Hinweis: Ich habe Clustering verwendet, um dies zu umgehen, aber es ist nicht schön.
node -e 'setTimeout(()=>{},1000);' & ps -T h $! | wc -l; kill $!
zeigt fünf Threads auf meinem System an. Die Hauptereignisschleife ist Single-Threaded (es wäre nicht sehr sinnvoll, wenn dies nicht der Fall wäre), aber Node ist stark Multithread-fähig und Sie können Multithread-Single-Prozess-Anwendungen schreiben, wenn Sie möchten. Ich würde gerne eine umfassende Antwort darüber schreiben, aber einige Leute haben beschlossen, Ihre Frage zu schließen, damit ich nicht kann. Ich stimme dafür, es wieder zu öffnen. Wenn es mehr Stimmen bekommt und wieder geöffnet wird, dann erwähne mich bitte im Kommentar.