Подтвердить что ты не робот

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

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

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

process.env.UV_THREADPOOL_SIZE = 10;

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

Посмотрите на мой 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);

После запуска я печатаю:

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

4b9b3361

Ответ 1

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

--v8 бассейн размера = Num
Установите размер пула потоков V8, который будет использоваться для выделения фоновых заданий. Если установлено значение 0, то V8 выберет подходящий размер пула потоков в зависимости от количества подключенных процессоров. Если предоставленное значение больше максимального значения V8, будет выбрано наибольшее значение.

4 дополнительные темы предназначены для использования V8. V8 использует эти потоки для выполнения различных задач, таких как фоновые задачи, связанные с GC, и оптимизация задач компилятора.