2017-02-02 2 views
0

Nehmen wir an, ich habe eine Maschine, die 5 verschiedene nodejs-Prozesse ausführt. Hat jeder Node-Prozess einen eigenen libuv-Thread-Pool oder teilen alle einen globalen threadpool?NodeJS - Ist libuv threadpool global oder pro-Prozess?

Ich bin verwirrt, weil ich libuv Thread asume würde, ist pro-Prozess, aber in libuv Dokumentation (http://docs.libuv.org/en/latest/threadpool.html) heißt es:

Der Threadpool ist global und geteilt über alle Ereignis

Schlaufen

Ich bin mir nicht sicher, ob ich wirklich verstehe, was "alle Ereignisschleifen" bedeutet.

Also, zurück zu meinem Beispiel. Wenn ich 5 NodeJS Prozesse habe, und da die Standardthreadgröße für libuv 4 ist, kann ich am Ende mit:

a) 9 Themen: 5 NodeJS Ereignisschleifen + 4 libuv Fäden für einen globalen Thread

b) 25 Threads: 5 Knotenjs Event Loops + (5 * 4) libuv Threads für 5 verschiedene Threadpools mit je 4 Threads.

c) keine der oben genannten?

Danke!

Antwort

2

Wenn in der Dokumentation "Alle Ereignisschleifen" steht, bezieht sich das auf alle libuv Ereignisschleifen in demselben Prozess. Der "globale" Teil, auf den Bezug genommen wird, ist innerhalb der Grenzen eines einzelnen Prozesses.

Es gibt keine Möglichkeit für libuv, mit beliebigen untergeordneten Prozessen zu koordinieren, um sicherzustellen, dass nur so viele Threads systemweit unter allen Prozessen verwendet werden, die libuv verwenden. Das würde wahrscheinlich eine Konfigurationsdatei oder etwas benötigen, die libuv nicht verwendet.

Also, wenn Sie 5 Knoten-Prozesse haben, dann vorausgesetzt, dass jeder Prozess die Standard-libuv Thread-Poolgröße verwendet, würden Sie insgesamt 20 libuv Threads (5 Prozesse * 4 Threads). Denken Sie daran, dass jeder Prozess mehr als 4 Threads hat, aber nicht alle sind libuv-Threads. Zum Beispiel haben Sie den Hauptthread, der für die Ausführung von Javascript verwendet wird, aber es gibt auch Threads, die V8 für verschiedene Aufgaben wie die Optimierung von Code, Garbage Collection, etc. verwendet.

+0

Insgesamt würde es _at mindestens_ so viele Threads verwenden, und darüber hinaus, GC, Optimierungen, Timeout-Handling usw. Vielen Dank! – jotadepicas

+0

auch, solche Nostalgie von Ihrem Benutzernamen! Haha – jotadepicas