Colocar vários trabalhos em segundo plano é uma boa maneira de usar os vários núcleos de uma única máquina. O parallel
, no entanto, permite que você distribua trabalhos em vários servidores da sua rede. De man parallel
:
GNU parallel is a shell tool for executing jobs in parallel using one or more computers. The typical input is a list of files, a list of hosts, a list of users, a list of URLs, or a list of tables.
Mesmo quando executado em um único computador, parallel
oferece muito mais controle sobre como seus trabalhos são paralelizados. Veja este exemplo na página man
:
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 demorado e complicado e, o que é mais importante, será lançado em quantos trabalhos houver .wav
de arquivos. Se você executar isso em alguns milhares de arquivos, é provável que coloque um laptop normal de joelhos. parallel
, por outro lado, lançará um trabalho por núcleo de CPU e manterá tudo limpo e organizado.
Basicamente, parallel
oferece a você a capacidade de ajustar como seus trabalhos são executados e a quantidade de recursos disponíveis que eles devem usar. Se você realmente quiser ver o poder dessa ferramenta, acesse o manual ou, no mínimo, , os exemplos que oferece.
O background simples realmente não chega nem perto do nível de sofisticação que deve ser comparado ao paralelo. Quanto a como parallel
difere de xargs
, a turma GNU oferece um bom resumo aqui . Alguns dos pontos mais importantes são:
- xargs lida mal com caracteres especiais (como espaço, 'e ").
- xargs pode executar um determinado número de tarefas em paralelo, mas não tem suporte para executar jobs de número-de-núcleos-cpu em paralelo.
- xargs não tem suporte para agrupar a saída, portanto, a saída pode ser executada junto, por exemplo a primeira metade de uma linha é de um processo e a última metade da linha é de outro processo.
- xargs não tem suporte para manter a ordem da saída, portanto, se executar tarefas 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.
- xargs não tem suporte para substituição de contexto, portanto, você terá que criar os argumentos.