How many threads does Node actually create?
Asked Answered
M

1

29

After reading this great answer about Node's thread nature, I started to play with UV_THREADPOOL_SIZE system variable to change the size of thread pool, and I found something interesting:

When I set

process.env.UV_THREADPOOL_SIZE = 10;

I get 15 threads in my Node process (I thought it should be 10 + 1 main Node thread = 11).

Have a look at my script:

process.env.UV_THREADPOOL_SIZE = 10;

//init thread pool by calling `readFile` function
require('fs').readFile(__filename, 'utf8', function(err, content) {});

//make node not exiting
setInterval(function() {}, 1000);

After running it I type:

ps -Lef | grep test.js | grep -v grep

and get the following results:

olegssh   4869  4301  4869  0   15 16:38 pts/0    00:00:00 /home/olegssh/node/bin/node test.js
olegssh   4869  4301  4870  0   15 16:38 pts/0    00:00:00 /home/olegssh/node/bin/node test.js
olegssh   4869  4301  4871  0   15 16:38 pts/0    00:00:00 /home/olegssh/node/bin/node test.js
olegssh   4869  4301  4872  0   15 16:38 pts/0    00:00:00 /home/olegssh/node/bin/node test.js
olegssh   4869  4301  4873  0   15 16:38 pts/0    00:00:00 /home/olegssh/node/bin/node test.js
olegssh   4869  4301  4874  0   15 16:38 pts/0    00:00:00 /home/olegssh/node/bin/node test.js
olegssh   4869  4301  4875  0   15 16:38 pts/0    00:00:00 /home/olegssh/node/bin/node test.js
olegssh   4869  4301  4876  0   15 16:38 pts/0    00:00:00 /home/olegssh/node/bin/node test.js
olegssh   4869  4301  4877  0   15 16:38 pts/0    00:00:00 /home/olegssh/node/bin/node test.js
olegssh   4869  4301  4878  0   15 16:38 pts/0    00:00:00 /home/olegssh/node/bin/node test.js
olegssh   4869  4301  4879  0   15 16:38 pts/0    00:00:00 /home/olegssh/node/bin/node test.js
olegssh   4869  4301  4880  0   15 16:38 pts/0    00:00:00 /home/olegssh/node/bin/node test.js
olegssh   4869  4301  4881  0   15 16:38 pts/0    00:00:00 /home/olegssh/node/bin/node test.js
olegssh   4869  4301  4882  0   15 16:38 pts/0    00:00:00 /home/olegssh/node/bin/node test.js
olegssh   4869  4301  4883  0   15 16:38 pts/0    00:00:00 /home/olegssh/node/bin/node test.js

As you can see there are 15 threads running.

If I set UV_THREADPOOL_SIZE = 1, I get 6 threads.

If I comment out the readFile line (so the thread pool is not initialized), I get 5 threads.

So I make a conclusion that Node at startup creates 5 threads. Why not 1?

Can somebody shed some light on this?

Edit: I'm using brand new Node 4.0.0

Metathesis answered 10/9, 2015 at 15:24 Comment(0)
S
34

UPDATE: Since node v6.0.0 you can define how many threads are used by V8 via the --v8-pool-size flag:

--v8-pool-size=num
Set V8's thread pool size which will be used to allocate background jobs. If set to 0 then V8 will choose an appropriate size of the thread pool based on the number of online processors. If the value provided is larger than V8's maximum, then the largest value will be chosen.

4 extra threads are for use by V8. V8 uses these threads to perform various tasks, such as GC-related background tasks and optimizing compiler tasks.

Sometimes answered 10/9, 2015 at 16:58 Comment(2)
Wow, that is a very straight forward answer. Thank you so much!Corps
Is this architecture still same with latest Node (17)?Compressed

© 2022 - 2024 — McMap. All rights reserved.