Ich habe über das C10K-Problem gelesen und insbesondere den Teil, der sich auf asynchrone Server-E / A bezieht. http://www.kegel.com/c10k.html#aio
Ich glaube, dies fasst ziemlich genau zusammen, was Node.js auf dem Server tut, indem es Threads ermöglicht, Benutzeranforderungen zu verarbeiten, während sie sich auf E / A-Interrupts (Ereignisse) verlassen, um Threads über abgeschlossene Jobs zu benachrichtigen, anstatt dass der Thread für den Thread verantwortlich ist voller CPU-Auftrag. Der Thread kann sich mit anderen Dingen auseinandersetzen (nicht blockieren) und benachrichtigt werden, wenn ein Auftrag erledigt ist (z. B. wenn eine Datei gefunden oder ein Video komprimiert wurde).
Dies bedeutet später, dass ein Thread mehr für Sockets und damit für Benutzer auf dem Server verfügbar ist.
Dann habe ich folgendes gefunden: http://teddziuba.com/2011/10/straight-talk-on-event-loops.html
Der Autor hier behauptet, dass das ereignisgesteuerte Framework (unterbrochenes Threading) zwar Threads freigibt, aber den Arbeitsaufwand einer CPU nicht wirklich verringert! Der Grund hierfür ist, dass, wenn ein Benutzer beispielsweise ein hochgeladenes Video komprimieren möchte, die CPU diesen Job noch ausführen muss und währenddessen blockiert (zur Vereinfachung sollten Sie hier die Parallelität außer Sie vergessen besser wissen!).
Ich bin ein unkomplizierter Programmierer, kein Serveradministrator oder ähnliches. Ich möchte nur wissen, ob Node.js ein Geschenk der Götter des Cloud Computing ist oder ob es nur heiße Luft ist und ob Unternehmen nicht durch die Verbesserung der Skalierbarkeit Zeit und / oder Geld sparen können.
Danke vielmals.
quelle
Antworten:
Natürlich wird jede CPU-gebundene Arbeit die CPU nutzen. Es wird die CPU in jeder Sprache oder in jedem Framework blockieren, in dem Sie es schreiben.
Node.js eignet sich hervorragend für E / A-gebundene Aufgaben, nicht für CPU-gebundene Aufgaben. Ich würde in Node kein schweres Heben machen, obwohl das möglich ist. Node.js löst echte Probleme, keine fiktiven oder imaginären wie Fibonacci-Zahlenserver . Es ist keine „heiße Luft“.
quelle
Während das C10K-Papier in Bezug auf Implementierungsdetails etwas veraltet ist, ist die ereignisbasierte Parallelität (das Reaktormodell) der präventiven Planung in gewisser Weise überlegen. Beispielsweise kann ein präemptives Planungsmodell Threads planen, während sie E / A-blockiert sind. Auf diese Weise können Node (und andere Tools wie Ruby's Event Machine und Python's Twisted) die verfügbaren Zyklen besser nutzen, indem sie mehr Zeit für echte Arbeit und weniger Zeit zum Blockieren aufwenden.
quelle
Multithreading steigert immer noch die Leistung. Die ursprüngliche Erklärung ist idiotisch, da die Existenz mehrerer Kerne nicht berücksichtigt wird. In dem Moment, in dem Sie mehr als einen Kern haben, sind Threads keine Threads mehr. Sie sind Hyperthreads. Jede threadintensive Anwendung wird von mehr als einer einzigen Thread-Anwendung profitieren.
quelle