2015-04-02 10 views
5

Ich habe angefangen, node.js zu lesen. Ich habe ein paar Fragen:Ich verstehe node.js

  1. Ist Knoten besser als Multi-Threading, nur weil es uns erspart über Deadlocks Pflege und reduziert Thread-Erzeugung Overhead, oder gibt es andere Faktoren sind auch? Der Knoten verwendet intern Threads, sodass wir nicht sagen können, dass er den Thread-Erstellungsaufwand spart, sondern nur, dass er intern verwaltet wird.

  2. Warum sagen wir, dass Knoten für Multi-Core-Prozessoren nicht gut ist? Es erzeugt Threads intern, also muss es Vorteile von Multi-Core bekommen. Warum sagen wir, es ist nicht gut für CPU intensive Anwendungen? Wir können immer neue Prozesse für CPU-intensive Tasks forken.

  3. Werden nur Funktionen mit Rückruf als Threads versendet oder gibt es andere Fälle?

  4. Nicht blockierende E/A kann auch mit Threads erreicht werden. Ein Haupt-Thread kann immer bereit sein, neue Anfragen zu empfangen. Was ist der Vorteil?

+0

Es gibt eine Reihe von ähnlichen Threads, um dieses Thema zu diskutieren, das heißt http://stackoverflow.com/questions/5062614/how-to-decide-when-to-use-node-js – SGD

+0

Für einen historischen Perspektive auf das Problem, siehe: http://stackoverflow.com/questions/3759683/how-node-js-server-is-better-than-thread-based-server/3759991#3759991 – slebetman

+0

Siehe auch das ursprüngliche c10k Problem, dass begann alles: http://www.kegel.com/c10k.html – slebetman

Antwort

0
  1. Richtig.

  2. Node.js skaliert mit Kernen, durch child processes, clusters, unter anderem.

  3. Callbacks sind nur eine übliche Konvention, die Entwickler verwenden, um asynchrone Methoden zu implementieren. Es gibt keinen technischen Grund, warum Sie sie aufnehmen müssen. Sie könnten beispielsweise alle Ihre asynchronen Methoden verwenden, um Versprechungen zu verwenden.

  4. Alles Knoten kann mit Threads durchgeführt werden, aber es gibt weniger Code/Overhead mit node.js asynchronous IO als gibt es mit Multi-Thread-Code. Sie müssen zum Beispiel nicht jedes Mal eine Instanz von thread or runnable erstellen, wie Sie es in Java tun würden.

+1

1 ist teilweise richtig. Node.js verwendet Threads nicht intern. Es ist eine gigantische while() Schleife um select()/poll()/epoll()/libevent – slebetman