节点实际上创建了多少线程?

时间:2021-11-29 21:02:53

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:

在阅读了这个关于Node的线程性质的伟大答案之后,我开始使用UV_THREADPOOL_SIZE系统变量来更改线程池的大小,我发现了一些有趣的事情:

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).

我的节点进程中有15个线程(我认为应该是10 + 1主节点线程= 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.

如您所见,有15个线程正在运行。

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

如果我设置UV_THREADPOOL_SIZE = 1,我将得到6个线程。

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

如果我注释掉readFile行(因此线程池没有初始化),我将得到5个线程。

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

因此我得出一个结论,Node在startup中创建了5个线程。为什么不1 ?

Can somebody shed some light on this?

有人能解释一下吗?

Edit: I'm using brand new Node 4.0.0

编辑:我正在使用全新的4.0.0节点

1 个解决方案

#1


12  

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.

V8使用了4个额外的线程。V8使用这些线程执行各种任务,例如与gc相关的后台任务和优化编译器任务。

#1


12  

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.

V8使用了4个额外的线程。V8使用这些线程执行各种任务,例如与gc相关的后台任务和优化编译器任务。