process.env.UV_THREADPOOL_SIZE 不工作?
process.env.UV_THREADPOOL_SIZE not working?
我正在尝试了解 nodeJS 中的线程池。
关于 运行 创建 process.env.UV_THREADPOOL_SIZE = 5;
的代码
process.env.UV_THREADPOOL_SIZE = 5;
const https = require('https');
const crypto = require('crypto');
const fs = require('fs');
const start = Date.now()
function doRequest() {
https.request('https://google.com', res => {
res.on('data', () => {});
res.on('end', () => {
console.log('Request:', Date.now() - start)
})
})
.end()
}
function doHash(){
crypto.pbkdf2("a", "b", 100000, 512, 'sha512', () => {
console.log("Hash:", Date.now() - start);
})
}
doRequest();
fs.readFile('multitask.js', 'utf8', () => {
console.log('fs:', Date.now() - start)
});
doHash();
doHash();
doHash();
doHash();
我在终端中得到输出:
$ node multitask.js
Request: 641
Hash: 4922
fs: 4925
Hash: 5014
Hash: 5039
Hash: 6512
并且在将线程池大小更改为 1 之后:
我得到相同的输出。
Request: 501
Hash: 4025
fs: 4028
Hash: 4087
Hash: 4156
Hash: 5079
谁能告诉我问题到底出在哪里?
在 linux 你的代码工作正常:
UV_THREADPOOL_SIZE = 1;
fs: 20
Request: 108
Hash: 817
Hash: 1621
Hash: 2399
Hash: 3175
UV_THREADPOOL_SIZE = 5
fs: 11
Request: 120
Hash: 836
Hash: 857
Hash: 859
Hash: 871
如果您使用 windows,而不是在 javascript 文件中设置它,您必须在调用脚本之前设置它。
set UV_THREADPOOL_SIZE=1 & node app.js
对我来说最简单的解决方案就是像这样添加一个 npm 脚本条目:
{
...
"main": "app.js",
"scripts": {
"start": "set UV_THREADPOOL_SIZE=2 & node app.js"
},
...
}
然后,在 cmd 中:
npm run start
我们这里遇到的问题来自 udemy 课程 Node JS 高级概念。
我试过这个来动态设置线程。但是在 windows 上,它不起作用。
按照 Windows.
上的上述说明进行操作
const OS = require("os")
process.env.UV_THREADPOOL_SIZE = OS.cpus().length
我正在尝试了解 nodeJS 中的线程池。
关于 运行 创建 process.env.UV_THREADPOOL_SIZE = 5;
process.env.UV_THREADPOOL_SIZE = 5;
const https = require('https');
const crypto = require('crypto');
const fs = require('fs');
const start = Date.now()
function doRequest() {
https.request('https://google.com', res => {
res.on('data', () => {});
res.on('end', () => {
console.log('Request:', Date.now() - start)
})
})
.end()
}
function doHash(){
crypto.pbkdf2("a", "b", 100000, 512, 'sha512', () => {
console.log("Hash:", Date.now() - start);
})
}
doRequest();
fs.readFile('multitask.js', 'utf8', () => {
console.log('fs:', Date.now() - start)
});
doHash();
doHash();
doHash();
doHash();
我在终端中得到输出:
$ node multitask.js
Request: 641
Hash: 4922
fs: 4925
Hash: 5014
Hash: 5039
Hash: 6512
并且在将线程池大小更改为 1 之后: 我得到相同的输出。
Request: 501
Hash: 4025
fs: 4028
Hash: 4087
Hash: 4156
Hash: 5079
谁能告诉我问题到底出在哪里?
在 linux 你的代码工作正常:
UV_THREADPOOL_SIZE = 1;
fs: 20
Request: 108
Hash: 817
Hash: 1621
Hash: 2399
Hash: 3175
UV_THREADPOOL_SIZE = 5
fs: 11
Request: 120
Hash: 836
Hash: 857
Hash: 859
Hash: 871
如果您使用 windows,而不是在 javascript 文件中设置它,您必须在调用脚本之前设置它。
set UV_THREADPOOL_SIZE=1 & node app.js
对我来说最简单的解决方案就是像这样添加一个 npm 脚本条目:
{
...
"main": "app.js",
"scripts": {
"start": "set UV_THREADPOOL_SIZE=2 & node app.js"
},
...
}
然后,在 cmd 中:
npm run start
我们这里遇到的问题来自 udemy 课程 Node JS 高级概念。 我试过这个来动态设置线程。但是在 windows 上,它不起作用。 按照 Windows.
上的上述说明进行操作const OS = require("os")
process.env.UV_THREADPOOL_SIZE = OS.cpus().length