3 回答
TA贡献1824条经验 获得超6个赞
根据 Zlib 文档
线程池用法:所有 zlib API,除了那些显式同步的 API,都使用 libuv 的线程池。这可能会在某些应用程序中导致令人惊讶的效果,例如性能不佳(可以通过调整池大小来缓解)和/或不可恢复的灾难性内存碎片。 https://nodejs.org/api/zlib.html#zlib_threadpool_usage
根据libuv的线程池,您可以更改环境变量UV_THREADPOOL_SIZE以更改最大大小
如果您希望同时压缩许多小文件,您可以使用 Worker Threads https://nodejs.org/api/worker_threads.html
再次阅读您的问题时,您似乎想要多个文件。使用 Worker Threads,它们不会阻塞你的主线程,你可以通过 promise 从它们那里获取输出。
TA贡献1836条经验 获得超5个赞
Node JS 使用 Libuv 和工作线程。工作线程是一种以多线程方式进行操作的方式。通过使用 libuv(它在线程池中维护线程),您可以增加默认节点 js 服务器的线程。您可以使用两者来提高节点 js 的操作性能。
所以这里是工作线程的官方文档:https : //nodejs.org/api/worker_threads.html
在此处查看如何增加节点 js 中的线程池:在节点 js 8 中打印 libuv线程池大小
TA贡献1795条经验 获得超7个赞
有关如何在 node js 中进行多线程的帮助。您必须创建以下三个文件
索引.mjs
import run from './Worker.mjs';
/**
* design your input list of zip files here and send them to `run` one file name at a time
* to zip, using a loop or something. It acts as promise.
* exmaple : run( <your_input> ).then( <your_output> );
**/
Worker.mjs
import { Worker } from 'worker_threads';
function runService(id, options) {
return new Promise((resolve, reject) => {
const worker = new Worker('./src/WorkerService.mjs', { workerData: { <your_input> } });
worker.on('message', res => resolve({ res: res, threadId: worker.threadId }));
worker.on('error', reject);
worker.on('exit', code => {
if (code !== 0)
reject(new Error(`Worker stopped with exit code ${code}`));
});
});
}
async function run(id, options) {
return await runService(id, options);
}
export default run;
WorkerService.mjs
import { workerData } from 'worker_threads';
// Here goes your logic for zipping a file, where as `workerData` will have <your_input>.
如果有帮助,请告诉我。
添加回答
举报
