J'ai un script convertissant des fichiers vidéo et je l'exécute sur le serveur sur des données de test et mesure son temps time
. En résultat, j'ai vu:
real 2m48.326s
user 6m57.498s
sys 0m3.120s
Pourquoi le temps réel est-il bien inférieur au temps utilisateur? Cela a-t-il un lien avec le multithreading? Ou quoi d'autre?
Edit: Et je pense que ce script tournait autour de 2m48s
real
temps est l'heure de l'horloge murale comme expliqué ci-dessous (c'est-à-dire ce que nous mesurerions si nous avions un chronomètre)Réponses:
La sortie que vous montrez est un peu étrange, car le temps réel serait généralement plus grand que les deux autres.
Real
l'heure est l'heure de l'horloge murale. (ce que nous pourrions mesurer avec un chronomètre)User
le temps est le temps passé en mode utilisateur dans le processusSys
est le temps CPU passé dans le noyau au sein du processus.Donc, je suppose que si le travail était effectué par plusieurs processeurs simultanément, le temps CPU serait supérieur au temps d'horloge murale écoulé.
S'agissait-il d'un type d'application simultanée / multithread / parallèle?
À titre d'exemple, voici ce que j'obtiens sur mon système Linux lorsque j'émets la
time find .
commande. Comme prévu, lereal
temps écoulé est beaucoup plus long que les autres sur ce processus mono-utilisateur / cœur unique.La règle d'or est la suivante:
la source
avconv
est multi-thread. Peut-il être.avconv
est la nouvelle génération deffmpeg
. Je convertissais 7 fichiers FLV courts (environ 20 secondes chacun).find
exemple, lausr
valeur est beaucoup plus faible car la plupart du temps a été passée pendant les interruptions, même sifind
elle avait été multithread, elle serait restée faible (désolé si je ne maîtrise pas les temps en anglais).Juste pour illustrer ce qui a été dit, avec un processus à deux threads faisant un calcul.
compiler
(Ceci est juste pour illustrer, dans la vraie vie, j'aurais dû ajouter le drapeau -D_REENTRANT)
(Les temps sont sur un Intel Atom qui a deux cœurs lents :))
la source