비디오 파일을 변환하는 스크립트가 있으며 테스트 데이터를 서버에서 실행하고 시간을 측정합니다 time
. 결과적으로 나는 보았다 :
real 2m48.326s
user 6m57.498s
sys 0m3.120s
실시간이 사용자 시간보다 훨씬 낮은 이유는 무엇입니까? 이것이 멀티 스레딩과 관련이 있습니까? 아니면 다른 무엇입니까?
편집 : 그리고 스크립트가 2m48s 경에 실행되고 있다고 생각합니다.
비디오 파일을 변환하는 스크립트가 있으며 테스트 데이터를 서버에서 실행하고 시간을 측정합니다 time
. 결과적으로 나는 보았다 :
real 2m48.326s
user 6m57.498s
sys 0m3.120s
실시간이 사용자 시간보다 훨씬 낮은 이유는 무엇입니까? 이것이 멀티 스레딩과 관련이 있습니까? 아니면 다른 무엇입니까?
편집 : 그리고 스크립트가 2m48s 경에 실행되고 있다고 생각합니다.
답변:
실시간은 일반적으로 다른 두 개보다 크기 때문에 표시되는 출력은 약간 이상합니다.
Real
시간은 벽시계 시간입니다. (스톱워치로 측정 할 수있는 것)User
시간은 프로세스 내에서 사용자 모드에서 소비 한 시간입니다.Sys
프로세스 내 커널에서 소비 한 CPU 시간입니다.따라서 여러 프로세서가 동시에 작업을 수행 한 경우 CPU 시간이 경과 된 벽시계 시간보다 높을 것으로 가정합니다.
이것이 동시 / 멀티 스레드 / 병렬 유형의 응용 프로그램입니까?
예를 들어, 이것은 time find .
명령을 실행할 때 Linux 시스템에서 얻는 것입니다 . 예상대로이 real
단일 사용자 / 단일 코어 프로세스 에서 경과 시간이 다른 시간보다 훨씬 큽니다.
real 0m5.231s
user 0m0.072s
sys 0m0.088s
경험의 법칙은 다음과 같습니다.
avconv
멀티 스레드 인지 모르겠습니다 . 그것은 할 수있다. avconv
의 새로운 세대입니다 ffmpeg
. 짧은 flv 파일 7 개를 변환했습니다 (각 약 20 초).
find
예제 에서는 usr
값이 훨씬 낮습니다. 대부분의 시간이 인터럽트 중에 소비 되었기 때문에 find
멀티 스레드 일지라도 낮게 유지되었을 것입니다 (영어 시제를 마스터하지 않으면 죄송합니다).
두 개의 스레드 프로세스가 계산을 수행하면서 말한 내용을 설명하기 위해.
/*a.c/*
#include <pthread.h>
static void * dosomething () {
unsigned long a,b=1;
for (a=1000000000; a>0; a--) b*=3;
return NULL;
}
main () {
pthread_t one, two;
pthread_create(&one,NULL, dosomething, NULL);
pthread_create(&two,NULL, dosomething, NULL);
pthread_join (one, NULL);
pthread_join (two, NULL);
}
/* end of a.c */
엮다
gcc a.c -lpthread
(실제로 -D_REENTRANT 플래그를 추가해야 함을 보여주기 위해 설명했습니다)
$ time ./a.out
real 0m7.415s
user 0m13.105s
sys 0m0.032s
(시간은 두 개의 느린 코어가있는 Intel Atom에 있습니다.)
real
시간이 (즉, 우리가 정지 시계가 있다면 우리가 측정 한 것의) 아래에 설명 된대로 벽 시계 시간입니다