在Perl:用戶+系統時間是否等於實時/掛鐘時間?
my ($usr,$sys,$cusr,$csys) = times;
printf "real %s, user %s, sys %s\n", $usr + $sys, $usr, $sys;
這是真的嗎?我讀過一些其他問題,例如人們將當前時間存儲在一個變量中並在稍後收集,但爲什麼不起作用?
在Perl:用戶+系統時間是否等於實時/掛鐘時間?
my ($usr,$sys,$cusr,$csys) = times;
printf "real %s, user %s, sys %s\n", $usr + $sys, $usr, $sys;
這是真的嗎?我讀過一些其他問題,例如人們將當前時間存儲在一個變量中並在稍後收集,但爲什麼不起作用?
C:\Temp> cat tt.pl
sleep 5;
my ($user, $system) = times;
print "u = $user s = $system\n";
C:\Temp> tt
u = 0.015 s = 0.015
不可以。用戶時間和系統時間爲something else。
my $start = time;
sleep 5;
my ($usr,$sys,$cusr,$csys) = times;
my $stop = time;
printf "Real time (approx): %gs User+sys: %gs\n", $stop-$start,$usr+$sys;
Real time (approx): 5s User+sys: 0.077s
不,它不是。用戶和系統時間僅佔用CPU時間。雖然該程序睡着了,但實時仍然通過,但用戶和系統時間保持不變。另外,在多CPU系統中,用戶+系統可能比實時大。
雖然少數人已經向您展示了睡眠示例,但也要考慮您的進程正在等待遠程計算機,其他進程等的響應的真實情況。在等待數據庫查詢時,即使您不使用處理器,wallclock時間也在繼續。
好點...它不算睡眠()...我相信我知道這一點,但由於某種原因無法想到的...謝謝。 – dlamotte 2009-11-12 16:20:22