Het Unix-commando xargs neemt een argumentenlijst van stdin aan en voert voor elk argument een commando uit. Zo pak je bijvoorbeeld alle gz-bestanden in de huidige directory uit met gunzip:

ls *.gz | xargs gunzip

Het nadeel is dat dit sequentieel gebeurt: de gz-bestanden worden één voor één na elkaar uitgepakt, en hierdoor gebruik je slechts een fractie van de beschikbare processorkracht. Gelukkig kent xargs ook opties die dit wel gebruiken: met -P geef je het aantal processen op dat xargs mag opstarten, en met -n het aantal rijen in de invoer die door elk proces per keer afgehandeld worden. Op een quad-core systeem wordt bovenstaande commando dan:

ls *.gz | xargs -P 4 -n 1 gunzip

GNU Parallel

Een programma dat een drop-in vervanger voor xargs biedt met een nog betere ondersteuning voor multicore-processoren is GNU Parallel. Je kunt met de optie -j (-P is ook ondersteund voor compatibiliteit met xargs) aangeven hoeveel processen tegelijk mogen worden uitgevoerd. Dit kan flexibeler dan met xargs. Je hoeft bijvoorbeeld geen vast aantal, zoals 4, in te geven, maar kunt ook aangeven hoeveel je bij het aantal processorkernen wilt optellen of aftrekken voor het aantal processen. Een eenvoudige manier om evenveel processen te starten als processorkernen is dan ook:

parallel -j +0

Je kunt ook opgeven hoeveel procent van de processorkernen GNU Parallel mag gebruiken, bijvoorbeeld:

parallel -j 50%

Zo zorg je dat je computer slechts maximaal voor de helft mag worden gebruikt door GNU Parallel. Als je de optie -j niet expliciet opgeeft, zal GNU Parallel standaard negen processen starten.

Het programma heeft nog heel wat geavanceerdere mogelijkheden, waarvoor je zeker de uitgebreide man-pagina eens moet lezen. Zo toont de optie --progress je een tussentijdse uitvoer, en met --sshlogin kun je ook van de verwerkingskracht van andere computers gebruikmaken.

Bron: Techworld