ビデオファイルを変換するスクリプトがあり、テストデータでサーバーで実行し、時間を測定しtime
ます。結果として私は見た:
real 2m48.326s
user 6m57.498s
sys 0m3.120s
リアルタイムがユーザー時間よりもはるかに短いのはなぜですか?これにはマルチスレッドとの接続がありますか?それとも他に何?
編集:そして、スクリプトは約2分48秒実行されていたと思います
ビデオファイルを変換するスクリプトがあり、テストデータでサーバーで実行し、時間を測定しtime
ます。結果として私は見た:
real 2m48.326s
user 6m57.498s
sys 0m3.120s
リアルタイムがユーザー時間よりもはるかに短いのはなぜですか?これにはマルチスレッドとの接続がありますか?それとも他に何?
編集:そして、スクリプトは約2分48秒実行されていたと思います
回答:
リアルタイムは通常他の2つよりも大きいため、表示される出力は少し奇妙です。
Real
時間は壁時計時間です。(ストップウォッチで測定できるもの)User
timeは、プロセス内のユーザーモードで費やした時間です。Sys
プロセス内のカーネルで費やされるCPU時間です。したがって、作業が複数のプロセッサによって同時に行われた場合、CPU時間は経過した壁時計時間よりも長くなると思います。
これは同時/マルチスレッド/並列タイプのアプリケーションでしたか?
例として、これはtime find .
コマンドを発行したときにLinuxシステムで取得するものです。予想どおり、経過real
時間は、このシングルユーザー/シングルコアプロセスのその他の時間よりもはるかに長くなります。
real 0m5.231s
user 0m0.072s
sys 0m0.088s
経験則は次のとおりです。
avconv
マルチスレッドかどうかはわかりません。そうかもしれません。avconv
の新世代ですffmpeg
。7つの短いflvファイルを変換していました(それぞれ約20秒)。
find
例のusr
値では、割り込み中にほとんどの時間が費やされているため、find
マルチスレッド化されていたとしても低いままです(英語の時制をマスターしていない場合は申し訳ありません)。
言われたことを説明するために、2つのスレッドプロセスで計算を行います。
/*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
(2つの遅いコアを持つIntel Atomでの時間です:))
real
時間は以下で説明するように壁時計時間であるためです(つまり、ストップウォッチがあった場合に測定するもの)