Итак, я выполнял этот код, чтобы проверить количество потоков в пуле потоков, созданных библиотекой libuv -
var fs = require('fs');
var util = require('util');
var sleep = require('sleep');
var start = process.hrtime();
var sample_func = function(callback) {
var i = 0;
sleep.sleep(1);
callback();
}
for (var i = 0; i < 6; ++i) {
(function (id) {
sample_func(function () {
var end = process.hrtime(start);
console.log(util.format('sample func %d finished in %ds', id, end[0] + end[1] / 1e9));
});
})(i);
}
Поскольку libuv по умолчанию создает 4 потока в пуле потоков, а моя функция-пример асинхронная, я был ожидая, что этот вывод будет напечатан в моей консоли -
sample func 0 finished in 1.003170344s
sample func 1 finished in 1.052704191s
sample func 2 finished in 1.058100525s
sample func 3 finished in 1.060514229s
sample func 4 finished in 2.003446385s
sample func 5 finished in 2.007682862s
Таким образом, первые 4 итерации выполняются параллельно, а последние 2 должны ждать, пока первые 4 завершатся sh. Однако, я получил следующее:
sample func 0 finished in 1.00095422s
sample func 1 finished in 2.056155718s
sample func 2 finished in 3.058480649s
sample func 3 finished in 4.061336076s
sample func 4 finished in 5.063556904s
sample func 5 finished in 6.066219487s
Это означает, что каждая итерация выполняется одна за другой, занимая в общей сложности 6 секунд. Кто-нибудь может мне помочь здесь, почему это происходит?
PS: я напечатал значение process.env.UV_THREADPOOL_SIZE, я получил неопределенное значение; версия узла: v12.9.1
Спасибо