Mam skrypt konwertujący pliki wideo i uruchamiam go na serwerze na danych testowych i mierzę jego czas time
. W rezultacie zobaczyłem:
real 2m48.326s
user 6m57.498s
sys 0m3.120s
Dlaczego czas rzeczywisty jest znacznie krótszy niż czas użytkownika? Czy ma to jakiś związek z wielowątkowością? Czy co jeszcze?
Edycja: I myślę, że skrypt działał około 2m48s
real
czas jest zegarem ściennym, jak wyjaśniono poniżej (tj. co byśmy zmierzyli, gdybyśmy mieli stoper)Odpowiedzi:
Wyświetlane wyniki są nieco dziwne, ponieważ czas rzeczywisty byłby zwykle większy niż pozostałe dwa.
Real
czas to zegar ścienny. (co możemy zmierzyć stoperem)User
czas to czas spędzony w trybie użytkownika w trakcie procesuSys
to czas procesora spędzony w jądrze w procesie.Tak więc przypuszczam, że jeśli praca byłaby wykonywana jednocześnie przez kilka procesorów, czas procesora byłby dłuższy niż upływ czasu zegara ściennego.
Czy była to aplikacja współbieżna / wielowątkowa / równoległa?
Na przykład to, co otrzymuję w moim systemie Linux po wydaniu
time find .
polecenia. Zgodnie z oczekiwaniami,real
czas, który upłynął, jest znacznie dłuższy niż w pozostałych procesach z jednym użytkownikiem / jednym rdzeniem.Ogólna zasada brzmi:
źródło
avconv
jest wielowątkowy. Może być.avconv
jest nowa generacjaffmpeg
. Konwertowałem 7 krótkich plików flv (około 20 sekund każdy).find
przykładzieusr
wartość jest znacznie niższa, ponieważ większość czasu spędzano podczas przerwań, nawet gdybyfind
był wielowątkowy, pozostałby na niskim poziomie (przepraszam, jeśli nie opanuję czasów angielskich).Aby zilustrować to, co zostało powiedziane, z dwuwątkowymi procesami wykonującymi obliczenia.
skompilować
(Aby to zilustrować, w rzeczywistości powinienem był dodać flagę -D_REENTRANT)
(Czasy są na Intel Atom, który ma dwa wolne rdzenie :))
źródło