可以即时增加 UV_THREADPOOL_SIZE 吗?

Possible to increase UV_THREADPOOL_SIZE on the fly?

我正在 NodeJS 上试验多线程并研究下面的代码

const crypto = require('crypto');

const start = Date.now();

crypto.pbkdf2('a', 'b', 100000, 512, 'sha512', () => {
  console.log('1:', Date.now() - start);
});

crypto.pbkdf2('a', 'b', 100000, 512, 'sha512', () => {
  console.log('2:', Date.now() - start);
});

crypto.pbkdf2('a', 'b', 100000, 512, 'sha512', () => {
  console.log('3:', Date.now() - start);
});

crypto.pbkdf2('a', 'b', 100000, 512, 'sha512', () => {
  console.log('4:', Date.now() - start);
});

crypto.pbkdf2('a', 'b', 100000, 512, 'sha512', () => {
  console.log('5:', Date.now() - start);
});

如果我错了请纠正我,默认情况下 libuv 的线程池大小为 4,如 here 所述。因此,通过 运行 上面的代码,每个 crypto.pbkdf2 都同时分配给单独的线程和 运行,而第五个将等待一段时间 运行。下面是结果

1: 484
2: 490
3: 490
4: 490
5: 963

我可以理解第五个 crypto.pbkdf2 由于线程不足而使时间加倍 运行ning 并行,所以现在我正在探索增加线程池的大小。下面是我的尝试,但结果似乎是一样的?

$ set UV_THREADPOOL_SIZE=120 && node threads.js 

2: 487
3: 492
1: 493
4: 493
5: 986

您应该通过 console.log(process.env.UV_THREADPOOL_SIZE) 验证您是否确实成功设置了环境变量,如果您这样做,您会发现它是 undefined

问题在于你如何调用你的命令,它应该如下所示

UV_THREADPOOL_SIZE=120 node threads.js