Xargs

Introduzione
E' possibile sostituire il classico ciclo while read: ls *.iso | while read FILE do    md5sum "$FILE" done

con xargs: ls *.iso | xargs -I{} md5sum "{}"

Come sfruttare CPU multithread / multicore
La maggior parte dei comandi di sistema e' in grado di sfruttare un unico thread o core: time (find . -type f -exec md5sum {} \;) real	1m14.573s user	0m20.841s sys	0m8.737s

xargs invece e' in grado di sfruttura piu' thread o core grazie ai parametri -n e -P: time (find . -type f -print0 | xargs -0 -n1 -P4 -I{} md5sum '{}') real	0m18.516s user	0m19.567s sys	0m8.732s

dove: -n max-args   Use at most max-args arguments per command line. -P max-procs  Run up to max-procs processes at a time; the default is 1.

Modificare i valori dei due parametri per trovare la combinazione piu' adatta all'operazione che si sta' compiendo. Quando si lavora su file, come nell'esempio, un limite importante da tener presente e' l'I/O.

Per sapere quanti core (o Hyper-Threading) avete a disposizione su un sistema: grep -c "^processor" /proc/cpuinfo 4

Fonte: Linux & C. Anno 11 Numero 69