首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >nodejs中的zip多线程

nodejs中的zip多线程
EN

Stack Overflow用户
提问于 2019-11-15 15:33:51
回答 5查看 1.3K关注 0票数 8

在nodejs中可以进行压缩和解压操作吗-多线程?

有很多像yauzl这样的模块,但都没有使用多线程,而且您不能使用node-cluster或类似的东西自己启动多个线程,因为每个zip文件都必须在一个线程中处理

EN

回答 5

Stack Overflow用户

发布于 2019-11-27 01:43:58

根据Zlib文档

Zlib线程池使用情况:除显式同步的API外,所有

API都使用libuv线程池。这可能会在某些应用程序中导致令人惊讶的效果,例如性能低于平均水平(可以通过调整池大小来缓解)和/或不可恢复的灾难性内存碎片。https://nodejs.org/api/zlib.html#zlib_threadpool_usage

根据libuv线程池,您可以更改环境变量UV_THREADPOOL_SIZE以更改最大大小

如果您希望同时压缩多个小文件,则可以使用Worker Thread https://nodejs.org/api/worker_threads.html

在再次阅读您的问题时,您似乎想要多个文件。使用Worker thread,这些线程不会阻塞你的主线程,你可以通过promises从它们那里得到输出。

票数 5
EN

Stack Overflow用户

发布于 2019-12-01 18:01:16

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

下面是worker线程的官方文档:https://nodejs.org/api/worker_threads.html

在这里查看如何在节点js中增加线程池:print libuv threadpool size in node js 8

票数 3
EN

Stack Overflow用户

发布于 2019-12-02 14:22:14

可以进行压缩和解压缩操作吗--在nodejs中使用多线程?

是。

...and你不能自己启动多个线程...因为每个zip文件都必须在单个线程中处理

我怀疑你的前提是错误的。为什么你认为一个节点进程不能启动多个线程?这是我正在运行的一个应用程序,它使用非常成熟的node.js cluster module,一个父进程充当监督者,两个子进程执行大量的网络和磁盘I/O任务。

正如您在C列中看到的,每个进程都在单独的线程上运行。这允许主进程在工作进程绑定CPU或磁盘时,保持对命令和控制任务(如派生/收获工作进程)的响应。这个特定的服务器接受来自网络的文件,有时会对其进行解压缩,然后通过外部文件处理器提供这些文件。就像你描述的那样,这是一个包括压缩的任务。

我不确定您是否愿意使用基于this snippet from the docs的工作线程

CPU(线程)对于执行

密集型JavaScript操作非常有用。它们不会对I/O密集型工作有多大帮助。Node.js内置的异步I/O操作比Workers更高效。

对我来说,这个描述就像是在尖叫,"crypo!“在过去,当必须执行任何代价高昂的加密操作时,我都会派生子进程。

在另一个项目中,我使用node的child_process模块,并在每次有一批文件需要压缩时启动一个新的子进程。该特定服务将看到一个包含大约400个文件的列表,这些文件的名称类似于process-me-2019.11.DD.MM,并将它们连接到单个process-me-2019-11-DD文件中。它需要一段时间来压缩,所以衍生一个新的进程可以避免在主线程上阻塞。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58872270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档