Colocar vários trabalhos em segundo plano é uma boa maneira de usar os vários núcleos de uma única máquina. parallel
no entanto, permite distribuir trabalhos por vários servidores da sua rede. De man parallel
:
O GNU paralelo é uma ferramenta de shell para executar tarefas em paralelo usando um ou mais computadores . A entrada típica é uma lista de arquivos, uma lista de hosts , uma lista de usuários, uma lista de URLs ou uma lista de tabelas.
Mesmo quando executado em um único computador, parallel
oferece um controle muito maior sobre como seus trabalhos são paralelos. Veja este exemplo da man
página:
To convert *.wav to *.mp3 using LAME running one process per CPU core
run:
parallel lame {} -o {.}.mp3 ::: *.wav
OK, você poderia fazer o mesmo com
for i in *wav; do lame "$i" -o "${i%.wav}.mp3" & done
No entanto, isso é mais longo e mais complicado e, mais importante, iniciará o maior número de trabalhos que houver .wav
arquivos. Se você executar isso em alguns milhares de arquivos, é provável que um laptop normal fique de joelhos. parallel
por outro lado, lançará um trabalho por núcleo de CPU e manterá tudo agradável e arrumado.
Basicamente, parallel
oferece a capacidade de ajustar a maneira como seus trabalhos são executados e a quantidade de recursos disponíveis que eles devem usar. Se você realmente deseja ver o poder dessa ferramenta, siga seu manual ou, no mínimo, os exemplos que ela oferece.
O fundo simples realmente não chega nem perto do nível de sofisticação para ser comparado ao paralelo. Quanto à parallel
diferença xargs
, a multidão do GNU apresenta um bom colapso aqui . Alguns dos pontos mais salientes são:
- O xargs lida mal com caracteres especiais (como espaço, 'e ").
- O xargs pode executar um determinado número de tarefas em paralelo, mas não tem suporte para executar tarefas de número de núcleos de CPU em paralelo.
- O xargs não tem suporte para agrupar a saída, portanto, a saída pode ser executada em conjunto, por exemplo, a primeira metade de uma linha é de um processo e a última metade da linha é de outro processo.
- O xargs não tem suporte para manter a ordem da saída, portanto, se executando trabalhos em paralelo usando xargs, a saída do segundo trabalho não poderá ser adiada até que o primeiro trabalho seja concluído.
- O xargs não tem suporte para executar tarefas em computadores remotos.
- O xargs não tem suporte para substituição de contexto, portanto você terá que criar os argumentos.
parallel
sintaxe, mais uma nova marca de teclado-faceroll para memorizar. Mas acho que o balanceamento automático entre núcleos / trabalhos vale a pena ...?sem
que faz parte do pacote GNU Parallel. Isso pode atender melhor aos seus requisitos de sintaxe.parallel
é mais poderoso quexargs
, mas essa comparação é bastante tendenciosa. Por exemplo,xargs
suporta cadeias terminadas em nulo como entrada para evitar problemas com espaços e aspas e também pode-d
emularparallel
(mesmo mencionado na comparação!).xargs -I
é suficiente substituição de contexto para a maioria dos casos simples, e eu geralmente sei o número de núcleos na máquina. Eu nunca tive um problema com saída desagrupada.