Copiar arquivos usando multi-threading aumenta o desempenho - Por quê?

1

Ao copiar arquivos de um local para outro, os recursos mais usados são memória (buffers) e E / S nos dispositivos. No entanto, ao usar um utilitário de cópia multiencadeada como o Robocopy, quando você especifica um grande número de encadeamentos, o desempenho pode ser aprimorado.

Minha pergunta é: Por que o multi-threading aumentaria significativamente o tempo de processamento de cópia para um grande número de arquivos? Não há muito trabalho que a CPU precise fazer de qualquer maneira. Obrigado.

    
por NoChance 01.08.2018 / 18:17

2 respostas

2

deve haver alguma sobrecarga de handshake por arquivo (especialmente ao copiar para um compartilhamento de rede) que é reduzido quando você usa a cópia multithread com muitos arquivos pequenos porque você faz o handshake simultaneamente. Eu suspeito que você verá menos vantagem com arquivos grandes. Este benchmark parece apoiar essa hipótese: link

Exemplos de sobrecarga de handshake podem ser verificar se o arquivo de destino já existe, verificando permissões, ...

    
por 01.08.2018 / 19:28
1

Mesmo no disco local, há alguma sobrecarga por arquivo, que acredito ser principalmente devido à despesa de abrir um arquivo: para abrir um arquivo existente, o Windows precisa analisar o caminho, localizar as entradas correspondentes em cada nível da árvore de diretórios, procure o arquivo na MFT e verifique a ACL. Para criar um novo arquivo, o Windows precisa analisar o caminho, localizar as entradas correspondentes em cada nível da árvore de diretórios, verificar o diretório ACL e incluir o arquivo na MFT e na entrada de diretório de nível superior.

Se você tiver apenas um thread, abra o arquivo de origem, abra o arquivo de destino, copie os dados e feche os arquivos, e só então poderá passar para o próximo. Isso significa deixar a parte ociosa do subsistema de E / S do tempo. Se você tem vários segmentos, você pode abrir arquivos ao mesmo tempo em que copia dados; o ideal é que você mantenha o sistema de E / S ocupado o tempo todo.

A sobrecarga não é tão perceptível em um único arquivo, mas se você tiver muitos arquivos pequenos, ele será adicionado e o tempo economizado poderá ser significativo.

    
por 02.08.2018 / 01:14