A operação zip e descompactar pode ser feita multithread no nodejs?
Sim.
... e você não pode iniciar vários threads por conta própria ... porque cada arquivo zip deve ser tratado em um único thread
Eu suspeito que sua premissa está com defeito. Por que exatamente você acha que um processo de nó não pode iniciar vários encadeamentos? Aqui está um aplicativo que estou executando, que está usando o módulo de cluster node.js muito maduro , com um processo pai atuando como supervisor e dois processos filhos, realizando tarefas ligadas à E / S de rede e de disco.
Como você pode ver na C
coluna, cada processo está sendo executado em um encadeamento separado. Isso permite que o processo mestre permaneça responsivo às tarefas de comando e controle (como gerar / colher trabalhadores) enquanto os processos de trabalho são vinculados à CPU ou ao disco. Esse servidor específico aceita arquivos da rede, às vezes os descompacta e os alimenta através de processadores de arquivos externos. IOW, é uma tarefa que inclui compactação como você descreve.
Não tenho certeza se você deseja usar threads de trabalho com base nesse snippet dos documentos :
Trabalhadores (threads) são úteis para executar operações JavaScript com uso intenso de CPU. Eles não ajudarão muito no trabalho intensivo de E / S. As operações de E / S assíncrona incorporadas do Node.js. são mais eficientes do que os Trabalhadores.
Para mim, essa descrição grita "crypo!" No passado, eu gerava processos filhos ao ter que executar operações caras de crypo.
Em outro projeto, uso o módulo child_process do nó e inicio um novo processo filho cada vez que tenho um lote de arquivos para compactar. Esse serviço específico vê uma lista de ~ 400 arquivos com nomes como process-me-2019.11.DD.MM
e os concatena em um único process-me-2019-11-DD
arquivo. Demora um pouco para compactar, o que gera um novo processo, evitando o bloqueio do encadeamento principal.