Ich bin neu bei NodeJS und habe mich über das Einzelinstanzmodell von Node gewundert. Wird in einer einfachen nodeJs-Anwendung eine blockierende Operation asynchron mit Callbacks behandelt, verarbeitet der Hauptthread, der die nodeJs ausführt, ebenfalls den Callback? Wenn die Anforderung ist, einige Daten aus der Datenbank abzurufen, und es gibt 100 gleichzeitige Benutzer und jede db-Operation dauert einige Sekunden, wenn der Rückruf schließlich ausgelöst wird (für jede der Verbindungen), akzeptiert der Haupt-Thread diese Anforderungen, die auch zum Ausführen des Callbacks verwendet werden? Wenn ja, wie skaliert NodeJs und wie reagiert es so schnell ?.Nodejs Callback-Mechanismus - welcher Thread behandelt den Callback?
Antwort
Jede Instanz von nodejs wird in einem einzigen Thread ausgeführt. Zeitraum. Wenn Sie beispielsweise eine Netzwerkanforderung asynchron ausführen, wartet sie nicht darauf, weder in Ihrem Code noch an einem anderen Ort. Es hat eine Ereignisschleife, die durchläuft. Wenn die Antwort bereit ist, ruft sie Ihren Rückruf auf.
Dies kann unglaublich performant sein, weil es nicht viele Threads und den gesamten Speicheraufwand benötigt, aber es bedeutet, dass Sie darauf achten müssen, keine synchronen Blockierungskram zu machen.
Es gibt eine ziemlich anständige Erklärung der Ereignisschleife bei http://blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/ und die ursprüngliche jsconf Präsentation von Ryan Dahl http://www.youtube.com/watch?v=ztspvPYybIY ist sehenswert. Haben Sie jemals einen Standing Ovation für eine technische Präsentation gesehen?
Dies ist immer noch ein bisschen unklar für mich. Wenn also 100 gleichzeitige Benutzer vorhanden sind, wird nur eine Knoteninstanz oder 100? Ausgeführt. Wenn man bedenkt, dass es einen asynch-Aufruf mit einem Callback gibt, und der Thread (sagen threadA) diesen Code nach dem Platzieren der Netzwerk/DB-Anfrage beendet, wenn der Callback ausgelöst wird, ist es ThreadA, der diesen Callback ausführt ?. – Rakesh
Ja. Wenn es 100 "gleichzeitige Benutzer" gibt (d. H. Benutzer, die Netzwerkanforderungen der Instanz nodejs machen), dann gibt es immer noch nur eine Knoteninstanz. Wenn die Anfrage gestellt wird, behandelt der einzelne Thread sie. Wenn es einen asynchronen Aufruf zum Lesen einer Datei oder zum Zugriff auf einen Netzwerkdienst oder was auch immer ausführt, ist es immer noch derselbe Thread. Wenn der Zugriff erfolgt und der Rückruf aufgerufen wird, ist es immer noch derselbe Thread. Sie * können * mehrere Modus-Instanzen ausführen lassen, wenn Sie sie mit einer Art Load-Balancer versehen können, und Knoten-Cluster ist geplant, ist aber immer noch experimentell. – deitch
@Deitch Wie kann der einzige Thread nicht blockieren, wenn es 100 Dinge gleichzeitig tut? Sagen wir mal von den 100 Dingen, die jeweils 1 Sekunde dauern, wenn sie alle in 1 Thread sind, müssen sie in Serie gemacht werden, heißt das, dass es für 100 Sekunden blockiert wird? –
- 1. Callback blockieren den Thread
- 2. nodejs Schleife async Callback-Funktion
- 3. Run Callback auf Haupt Thread
- 4. BackgroundWorker abgeschlossenes Ereignis - welcher Thread?
- 5. Wie finde ich heraus, welcher Thread den Monitor hält?
- 6. welcher Thread beendet der Hintergrundarbeiter den Event-Handler?
- 7. Fehler: Callback ist keine Funktion (nodejs)
- 8. NodeJS geben Rückruf mit der Callback-Funktion
- 9. async.map wird nicht Callback in Nodejs
- 10. Nodejs Fehlerbehandlung im Callback (xml-stream)
- 11. Callback zweimal in Einzelfunktion in NodeJS übergeben
- 12. Wie Callback-Funktion in NodeJs funktioniert?
- 13. Android (OS6) Laufzeitberechtigungen Callback-Thread für "onRequestPermissionsResult"
- 14. Scala-Futures - welcher Thread führt onComplete aus?
- 15. Wie Serialisierung bei Verwendung eines Worker-Thread von Wicket behandelt?
- 16. async warten Ausnahmefangen - welcher Thread bin ich?
- 17. Python-Thread-Pool, der Ausnahmen behandelt
- 18. Java-Callback für einen neuen Thread ausführen
- 19. So finden Sie, welcher Thread feststeckt
- 20. sendOrderedBroadcast - Welcher Thread wird als Antwortempfänger ausgeführt?
- 21. Welcher Thread endete zuerst in gleichzeitigen Threads?
- 22. Ajax Anfrage. Welcher Callback wird zuerst vollständig oder erfolgreich ausgeführt?
- 23. Welcher Artikel behandelt "Code von 10000 Fuß ansehen"?
- 24. In .NET, in welchem Thread werden Ereignisse behandelt?
- 25. NodeJS warten auf Callback zum Beenden auf Ereignis emittieren
- 26. Kann ein Standard-Thread für den Thread Pool wiederverwendet werden?
- 27. TypeError: Callback ist keine Funktion mit asyncJS in nodeJS
- 28. Wie behandelt man Routen, die # in nodejs mit expressjs haben?
- 29. Optimale Möglichkeit zum Stapeln von asynchronen Callback-Ereignissen in Nodejs
- 30. Blockiert ThreadPool.RegisterWaitForSingleObject den aktuellen Thread oder einen Threadpool-Thread?
Gefunden das wirklich hilfreich: http://rickgaribay.net/archive/2012/01/28/node-is-not-single-threaded.aspx – Rakesh