Сколько потоков на самом деле создает Node?

Прочитав отличный ответ о природе потока Node, я начал играть с системной переменной UV_THREADPOOL_SIZE, чтобы изменить размер пула потоков, и я нашел кое-что интересное:

Когда я установил

process.env.UV_THREADPOOL_SIZE = 10;

Я получаю 15 потоков в своем процессе Node (я думал, что должно быть 10 + 1 основной поток Node = 11).

Взгляните на мой скрипт:

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

После запуска я набираю:

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

и получить следующие результаты:

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

Как видите, запущено 15 потоков.

Если я установлю UV_THREADPOOL_SIZE = 1, я получу 6 потоков.

Если я закомментирую строку readFile (чтобы пул потоков не инициализировался), я получаю 5 потоков.

Отсюда делаю вывод, что Node при запуске создает 5 потоков. Почему не 1?

Может ли кто-нибудь пролить свет на это?

Изменить: я использую новую версию Node 4.0.0.


person Oleg    schedule 10.09.2015    source источник


Ответы (1)


ОБНОВЛЕНИЕ: Начиная с узла v6.0.0, вы можете определить, сколько потоков используется V8, с помощью флага --v8-pool-size:

--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 дополнительных потока для использования V8. V8 использует эти потоки для выполнения различных задач, таких как фоновые задачи, связанные с сборкой мусора, и задачи оптимизации компилятора.

person mscdex    schedule 10.09.2015
comment
Вау, это очень прямой ответ. Большое спасибо! - person Nhân Nguyễn; 20.06.2019