在nodejs中可以进行压缩和解压操作吗-多线程?
有很多像yauzl这样的模块,但都没有使用多线程,而且您不能使用node-cluster或类似的东西自己启动多个线程,因为每个zip文件都必须在一个线程中处理
发布于 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从它们那里得到输出。
发布于 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
发布于 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文件中。它需要一段时间来压缩,所以衍生一个新的进程可以避免在主线程上阻塞。
https://stackoverflow.com/questions/58872270
复制相似问题