私はUbuntu 14.04の標準端末でスクリプトのタイミングを調整することに慣れていますtime
。Perl
私は持っています読むそれはreal time
ストップウォッチの時間です。私は、ユーザーとしてプログラムが開始されてからプログラムが終了するまで実行される時間を見ています。しかし、私は何user
をいつ理解していませんsys
。time
マンページはいくら言ってもあいまいです。
real
時代は互いに異なりますが、user
それが何sys
を表すのかは明確ではありません。
私のスクリプトでは、違いを確認するためにC ++とPerl [1]をベンチマークしており、実際にどのデータを取得しているのかを知りたいと思います。出力例は次のとおりです。
real 0m24.198s
user 0m23.120s
sys 0m1.030s
デフォルトの時間形式がユーザーに何を伝えるかを詳しく説明できますか?私はLinuxに初めて触れたので、あまりにも多くの仮定をしないでください。
real
[1]興味深いことに、私のベンチマークでは、C ++は時間の点でPerlよりはるかに高速ですが、時間差は大きくなく、sys
C ++は実際にsys
Perlよりも多くの時間を使用しています。だから私は彼らが何を意味するのか知りたいです。
答え1
~からウィキペディア:
- ユーザー時間とシステム時間
「ユーザーCPU時間」という用語は、最初は少し誤解を招く可能性があります。明確に言えば、総CPU時間は、CPUがプログラムのために何かを実行するのに費やした時間と、CPUがプログラムに代わってカーネルへのシステムコールを実行するのに費やした時間の組み合わせです。プログラムが配列を繰り返しながら、ユーザーのCPU時間が累積されます。一方、プログラムがexecやforkなどのシステムコールを実行すると、システムCPU時間が累積されます。
- リアルタイム対CPU時間
この記事では、「リアルタイム」という用語は、ストップウォッチを使用するのと同様に、経過した「ウォールクロック」時間を意味します。合計CPU時間(ユーザー時間+システム時間)は、この値より大きくても短くてもかまいません。プログラムが待機するのに時間がかかり、まったく実行されない可能性があるため(ユーザーモードまたはシステムモードの場合)、実際の時間は合計CPU時間より長くなる可能性があります。プログラムは、CPU時間(ユーザーとシステム)がtimeコマンドによって報告された値に追加される子プロセスを生成できるため、CPU時間の合計が実際の時間よりも長くなる可能性があります。