====== Convertir des images : xargs vs parallel vs boucle bash ====== Reflexion sur le temps et charge processus d'une commande. Cas concret : convertir un ensemble de fichiers PNG en GIF ===== Echantillon ===== du -sh 240 fichiers générés aléatoirement pour un total disque de 7,5 Mo 7,5M ls -l | wc -l 240 ===== Avec xargs ===== $ time ls -1 *.png | xargs -n 1 bash -c 'convert "$0" "${0%.*}.gif"' real 0m30,057s user 0m30,858s sys 0m4,422s ===== En shell ===== $ time ls -1 *.png | parallel -j 3 convert '{}' '{.}.gif' real 0m28,761s user 0m54,001s sys 0m20,123s ===== Avec parallel ===== $ time ls -1 *.png | parallel convert '{}' '{.}.gif' real 0m25,827s user 0m56,121s sys 0m21,074s ===== Quesako ===== **real** fait référence au temps réel écoulé; user et **sys** font référence au temps CPU utilisé uniquement par le processus. Le temps **real** est l'horloge du PC - le temps du début à la fin de l'appel. Il s'agit de tout le temps écoulé, y compris les tranches de temps utilisées par d'autres processus et le temps que le processus passe bloqué (par exemple s'il attend la fin des E / S). Le temps **user** est la quantité de temps CPU passé en code en mode utilisateur (en dehors du noyau) dans le processus. Il s'agit uniquement du temps CPU real utilisé lors de l'exécution du processus. Les autres processus et le temps que le processus passe bloqué ne comptent pas dans ce chiffre. Le temps **sys** est la quantité de temps CPU passé dans le noyau au sein du processus. Cela signifie exécuter le temps CPU passé dans les appels système au sein du noyau, par opposition au code de bibliothèque, qui s'exécute toujours dans l'espace utilisateur. Comme «user», il s'agit uniquement du temps CPU utilisé par le processus. ** User + Sys** vous indiqueront combien de temps CPU réel votre processus a utilisé. Notez que cela concerne tous les processeurs, donc si le processus a plusieurs threads (et que ce processus s'exécute sur un ordinateur avec plus d'un processeur), il peut potentiellement dépasser le temps d'horloge murale signalé par **Real** (ce qui se produit généralement). Notez que dans la sortie, ces chiffres incluent le temps utilisateur et **Sys** de tous les processus enfants (et leurs descendants) ainsi que le moment où ils auraient pu être collectés, par exemple par wait (2) ou waitpid (2), bien que les appels système sous-jacents renvoient séparément les statistiques du processus et de ses enfants. //Gardez à l'esprit que réel représente le temps réel écoulé, tandis que les valeurs **user et sys** représentent le temps d'exécution du processeur. Par conséquent, sur un système multicœur, le temps de l'utilisateur et / ou du système (ainsi que leur somme) peut réellement dépasser le temps réel.// Bon voilà c'était juste au passage...