Explicações · um
A maior parte do que torna este cliente rápido não é um caminho de rede mais veloz. É que os dados se movem uma só vez. Isto é o que isso significa na prática, porque é coisa diferente do desempacotamento direto, que formas de arquivo lhe sobrevivem, e quanto vale mesmo, numa máquina real, eliminar o ciclo de escrever e voltar a ler.
O ponto de partida
Um post são milhares de pequenos artigos codificados que juntos formam um conjunto de volumes de arquivo, os quais por sua vez contêm o ficheiro que queres de facto. Ir de um ao outro foram tradicionalmente quatro tarefas separadas, cada uma a terminar antes de a seguinte começar.
Cada etapa está correta, e o resultado está certo. Mas o conteúdo foi escrito duas vezes, lido pelo menos duas vezes, e no ponto mais alto o disco teve de albergar duas cópias completas de uma tarefa de que só querias uma cópia. O cronómetro que tu vives são as quatro etapas em sequência, e é por isso que um cliente pode anunciar um descarregamento rápido e ainda assim deixar-te à espera.
A mudança
Passagem única significa que os bytes vão da rede ao seu destino final sem nunca se tornarem um ficheiro de arquivo no teu disco. Não há etapa dois nem três, porque o trabalho de ambas acontece enquanto a etapa um ainda decorre.
Na prática, à medida que cada artigo chega é descodificado em memória e entregue logo a duas coisas ao mesmo tempo. O verificador confere-o de imediato com os dados de paridade, portanto a correção fica estabelecida enquanto os dados aterram e não relendo-os mais tarde. O extrator trata os bytes que chegam como uma posição dentro do arquivo, calcula a que parte de que ficheiro de conteúdo pertencem, e escreve-os aí.
Os volumes do arquivo nunca são montados. Existem como uma estrutura que o extrator entende enquanto o descarregamento vai em voo, e a única coisa que chega ao teu disco é o ficheiro que querias. Quando chega o último artigo praticamente nada resta por fazer, e é por isso que os nossos tempos de chegada ficam perto do próprio tempo de descarregamento e não de um descarregamento mais uma cauda.
A consequência mensurável: para a mesma tarefa escrevemos cerca de metade, relemos muito menos, e precisamos aproximadamente do próprio tamanho do conteúdo em espaço livre e não do dobro. Num lançamento de 190 GB isso são cerca de 157 GB de espaço livre contra cerca de 313 GB, e aproximadamente um terço do tráfego de disco.
Duas coisas tornam isto mais difícil do que parece, e são a razão de ser pouco comum. Os artigos não chegam por ordem, portanto o extrator tem de lidar com bytes a aterrar em posições arbitrárias em vez de como um fluxo desde o início. E um arquivo comprimido não pode ser descomprimido a partir do meio, portanto qualquer parte do trabalho que exija mesmo ordem tem de ser reconhecida e tratada de outra maneira em vez de dada como resolvida.
A comparação que nos perguntam
O desempacotamento direto é uma boa funcionalidade e os clientes que a têm ficam a ganhar. Também resolve outra parte do problema, e a diferença aparece exatamente onde importa.
O desempacotamento direto começa a extrair antes de o descarregamento ter terminado, de modo que a etapa três se sobrepõe à etapa um em vez de a seguir. O que não faz é eliminar a etapa um. Os volumes do arquivo continuam a ser escritos por inteiro no teu disco, porque o desempacotador é um convencional que lê ficheiros convencionais; o desempacotamento direto limita-se a arrancá-lo mais cedo. As duas cópias continuam a existir, as duas escritas continuam a acontecer, e a necessidade de espaço livre não muda.
| escrever os volumes no disco | espaço livre necessário | vezes que o conteúdo é escrito | |
|---|---|---|---|
| Descarregar, depois desempacotar | sim, depois releitura | ~2× a tarefa | 2 |
| Desempacotamento direto | sim, relido mais cedo | ~2× a tarefa | 2 |
| Passagem única | nunca escritos | ~1× a tarefa | 1 |
A segunda diferença é o que acontece quando a forma não é simples. Como o desempacotamento direto entrega o trabalho a um desempacotador convencional à medida que os volumes aparecem, precisa que a situação seja desimpedida: os volumes presentes numa ordem utilizável, nenhuma reparação pendente, nada que tenha de ser desbloqueado primeiro, e um arquivo cujo conteúdo não sejam ele próprio arquivos. Quando alguma dessas coisas falha, o sensato é recuar e recorrer a desempacotar no fim, e é isso que acontece. Obténs um resultado correto e os tempos habituais.
Como o nosso extrator é construído desde o início em torno de bytes fora de ordem, essas situações não são exceções para ele. É essa a verdadeira distinção: não que comecemos mais cedo, mas que não dependemos de condições que muitas vezes não se verificam.
O que lhe sobrevive de facto
Um desenho destes só vale a pena se se aplicar aos posts que encontras mesmo, e não a um caso ideal limpo. A posição atual: nenhum formato de contentor é tratado apenas em disco. RAR, 7z e zip passam todos pelo caminho de passagem única.
| forma | passagem única | notas |
|---|---|---|
| RAR, armazenado (sem compressão) | sim | o caso comum nos lançamentos multimédia |
| RAR, comprimido | sim | incluindo um arquivo comprimido como camada exterior |
| RAR 1.5, 3, 4 e 5 | sim | as quatro gerações do formato |
| 7z | sim | incluindo conteúdos comprimidos com deflate |
| zip | sim | incluindo conteúdos bzip2 e LZMA |
| Conteúdos cifrados | sim | com palavra-passe, incluindo zip cifrado |
| Cabeçalhos cifrados | sim | quando também os nomes dos ficheiros estão ocultos |
| Cadeias de palavras-passe | sim | a palavra-passe de cada camada guardada na camada acima |
| Arquivos aninhados | sim | desaninhados em andamento, até uma profundidade configurável |
| Danificado em várias camadas | sim | reparação em cada nível, ainda numa só passagem |
| Conjuntos divididos numericamente | sim | divisões ao estilo name.001 |
| Arquivos autoextraíveis | passagem em disco | o arquivo não começa no início do ficheiro |
Zip repartido (.z01) | passagem em disco | e algumas variantes de zip mais raras |
| Tarefas retomadas | passagem em disco | uma tarefa continuada após um reinício termina de modo convencional |
As três recusas são honestas e comportam-se todas do mesmo modo: a tarefa conclui-se corretamente, pela via convencional, e para esse descarregamento obténs os tempos habituais com duas cópias. Nada falha; apenas deixa de ser rápido da maneira que o resto desta página descreve. Os arquivos autoextraíveis são recusados por uma razão estrutural e não por falta de empenho: identificar um arquivo pelos seus primeiros bytes não pode funcionar quando os primeiros bytes são um programa.
As linhas de aninhado e cifrado são as que vale a pena levar a sério, porque é aí que a maioria dos clientes te devolve a tarefa. Num corpus gerado de dez formas aninhadas, avaliado por resumo do conteúdo para que um cliente que renomeie o conteúdo continue a ter crédito, concluímos 9 de 10 sem intervenção; o cliente seguinte concluiu 5, e outros dois concluíram 2. A que não concluímos automaticamente é uma escada de dez níveis, que termina limpa no limite de profundidade predefinido de cinco deixando a camada mais funda como arquivo saudável, e conclui-se por inteiro se subires o limite. Essas voltas estão na página de benchmarks com a grelha completa.
Porque vale a pena fazê-lo
É mais rápido, por uma razão pouco vistosa. Escrever 60 GB e voltar a lê-los não é gratuito nem mesmo num disco de estado sólido rápido, e em qualquer coisa mais lenta é muitas vezes o verdadeiro estrangulamento em vez da rede. Tirar uma escrita e duas leituras tira esse tempo por inteiro do teu cronómetro. O ganho é maior exatamente onde mais se nota: tarefas grandes, e máquinas cujo disco não é a sua parte mais rápida.
Reduz o desgaste a metade. Os discos de estado sólido têm dentro um número finito de escritas, e um descarregador que escreve cada conteúdo duas vezes gasta esse orçamento ao dobro do ritmo sem qualquer benefício para ti. Ao longo de umas centenas de terabytes descarregados, o que é um ano normal para um utilizador ativo, a diferença é uma fração apreciável da vida de um disco.
Muda o que cabe. O espaço livre não é uma característica de desempenho, é um sim ou não. Uma tarefa que precisa do dobro do seu próprio tamanho de folga ou corre ou não corre. Precisar de cerca do tamanho do conteúdo significa que há tarefas que se concluem em máquinas e volumes onde a abordagem convencional simplesmente para, e é por isso que um lançamento de 190 GB cabe aqui em cerca de 157 GB de espaço livre e não em cerca de 313 GB.
Custa menos tempo de processador. Não fazer passar os dados duas vezes pelo disco elimina o trabalho de o fazer, e verificar durante o descarregamento significa nenhuma segunda passagem sobre o conteúdo para o conferir. O nosso custo de processador mantém-se plano em cerca de 1.7 segundos de processador por gigabyte, de uma tarefa de 35 GB a uma de 190 GB, e é essa a propriedade útil: o custo por gigabyte não cresce à medida que a tarefa cresce.
Corre com menos memória, e com memória limitada. Como os bytes são consumidos à medida que chegam em vez de acumulados, o conjunto de trabalho é um orçamento que defines e não uma função do tamanho da tarefa. É isso que permite processar um lançamento de 190 GB numa máquina com aproximadamente 1.1 GB disponíveis. A distinção que importa não é o número mas a forma: memória que cresce com a tarefa acabará por encontrar uma tarefa que a tua máquina não consegue terminar, e falha por troca para disco ou por ser abatida em vez de te avisar.
No conjunto, isto é menos sobre ganhar um benchmark do que sobre onde o programa consegue sequer correr. Um desenho que precisa de metade do espaço livre, metade das escritas e uma quantidade limitada de memória funciona num pequeno servidor doméstico, num portátil mais velho ou num NAS, e é aí que vive boa parte deste software.
Todos os valores desta página são medidos e publicados com a compilação e a data ao lado na página de benchmarks, incluindo as voltas que perdemos. O contrapeso honesto, dito também ali: um extrator e um reparador construídos para acompanhar um descarregamento em curso mantêm mais memória residente do que uma ferramenta autónoma corrida uma vez a partir da linha de comandos, portanto se a tua restrição é a menor pegada possível para uma tarefa única sobre um ficheiro que já tens, as ferramentas dedicadas ganham essa coluna.