node 在执行 IO 操作 (读取文件) 时会开启线程池(默认是 4 个), 咱们能够通过设置 UV_THREADPOOL_SIZE 减少线程池个数。
背景:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
</body>
</html>
const fs = require("fs");
process.env.UV_THREADPOOL_SIZE=64;
setInterval(() => {fs.readFile(`${__dirname}/index.html`,()=>{console.log("read success");
})
}, 3000);
{
"name": "threadpool",
"version": "1.0.0",
"description": "","main":"index.js","scripts": {"test":"echo \"Error: no test specified\" && exit 1","start":"node index.js"},"keywords": [],"author":"",
"license": "ISC"
}
在 windows 下运行 node, 发现 process.env.UV_THREADPOOL_SIZE 设置有效。
线程数量应该从 12 减少到 76 个, 理论为 16 个, 阐明 UV_THREADPOOL_SIZE 设置有效
起因:
Linux 零碎下能够在 js 代码里间接设置, 而 windows 零碎下须要在执行 node 命令前设置线程池数量, 将 node 启动改为如下图(注:= 号左右不要有空格)
运行后果: