javascript - process.env.UV_THREADPOOL_SIZE 不工作?

标签 javascript node.js libuv

我想了解 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

关于javascript - process.env.UV_THREADPOOL_SIZE 不工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51224868/

相关文章:

javascript - 用javascript输入空设定值

javascript - 导出默认值时是异步函数还是异步=>?

node.js - 如何使用express、mongoose将mp3上传到mongodb

c - 理解 libuv/epoll/非阻塞网络 IO

node.js - V8 引擎在 Node.js 中扮演什么角色?

node.js - Node js : how libuv thread pool works?

javascript - 如何像使用 PHP 一样在 HTML 页面中运行 Node.js 脚本?

javascript - jQuery - 循环数据选项

javascript - 如何使用共享浏览器实例正确拆分 casperjs 测试

Node.js http 请求不工作