为了账号安全,请及时绑定邮箱和手机立即绑定

nodejs中zip的多线程

nodejs中zip的多线程

三国纷争 2022-01-01 18:40:29
可以在 nodejs 中进行多线程压缩和解压缩操作吗?有一堆像 yauzl 这样的模块,但都没有使用多线程,而且你不能用 node-cluster 或类似的东西自己启动多个线程,因为每个 zip 文件都必须在单个线程中处理
查看完整描述

3 回答

?
慕妹3242003

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 从它们那里获取输出。


查看完整回答
反对 回复 2022-01-01
?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

Node JS 使用 Libuv 和工作线程。工作线程是一种以多线程方式进行操作的方式。通过使用 libuv(它在线程池中维护线程),您可以增加默认节点 js 服务器的线程。您可以使用两者来提高节点 js 的操作性能。

所以这里是工作线程的官方文档:https : //nodejs.org/api/worker_threads.html

在此处查看如何增加节点 js 中的线程池:在节点 js 8 中打印 libuv线程池大小


查看完整回答
反对 回复 2022-01-01
?
一只萌萌小番薯

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>.


如果有帮助,请告诉我。


查看完整回答
反对 回复 2022-01-01
  • 3 回答
  • 0 关注
  • 351 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号