Did I understand correctly: If I use
cluster
package, does it mean that a new node instance is created for each created worker?What is the difference between
cluster
andworker_threads
packages?
Asked
Active
Viewed 1.4k times
39

Oliver Sieweke
- 1,812
- 2
- 14
- 23

Денис Райгородский
- 493
- 1
- 4
- 6
1 Answers
70
Effectively what you are differing is process based vs thread based. Threads share memory (e.g. SharedArrayBuffer
) whereas processes don't. Essentially they are the same thing categorically.
- One process is launched on each CPU and can communicate via IPC.
- Each process has it's own memory with it's own Node (v8) instance. Creating tons of them may create memory issues.
- Great for spawning many HTTP servers that share the same port b/c the
mastermain process will multiplex the requests to the child processes.
- One process total
- Creates multiple threads with each thread having one Node instance (one event loop, one JS engine). Most Node API's are available to each thread except a few. So essentially Node is embedding itself and creating a new thread.
- Shares memory with other threads (e.g.
SharedArrayBuffer
) - Great for CPU intensive tasks like processing data or accessing the file system. Because NodeJS is single threaded, synchronous tasks can be made more efficient with workers

snewcomer
- 2,020
- 1
- 19
- 22
-
For worker_threads: One process total. Does that mean spread across multiple V8 instances ? – joedotnot Jan 04 '21 at 01:22
-
7Each worker thread will have it's own V8 instance and Event Loop. This is how you gain parallelism. They call it a V8 isolate. Effectively, this is an independent instance of the V8 runtime that has its own JS heap and a microtask queue. Each Node.js worker thread can thus run it's code in isolation without sharing their heaps. Communication; however, occurs through a message channel between child and parent. – snewcomer Jan 05 '21 at 14:21
-
1@snewcomer Wouldn't worker threads involve in deadlock situations as they share memory? If yes, then wouldn't it slow down the CPU performance? – Sarim Javaid Khan May 02 '22 at 00:47
-
Why do you strikethrough master ? – CDT Jul 16 '22 at 11:34
-
1@SarimJavaidKhan They do not share memory. data passed over channels is copied, but this is still way more efficient than JSON stringify/parse for IPC. – Daniel Ennis - Aikar Nov 03 '22 at 05:15