2009-11-12 71 views
1

在Perl:用戶+系統時間是否等於實時/掛鐘時間?

my ($usr,$sys,$cusr,$csys) = times; 
printf "real %s, user %s, sys %s\n", $usr + $sys, $usr, $sys; 

這是真的嗎?我讀過一些其他問題,例如人們將當前時間存儲在一個變量中並在稍後收集,但爲什麼不起作用?

回答

4
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 
+0

好點...它不算睡眠()...我相信我知道這一點,但由於某種原因無法想到的...謝謝。 – dlamotte 2009-11-12 16:20:22

4

不可以。用戶時間和系統時間爲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 
10

不,它不是。用戶和系統時間僅佔用CPU時間。雖然該程序睡着了,但實時仍然通過,但用戶和系統時間保持不變。另外,在多CPU系統中,用戶+系統可能比實時大。

2

雖然少數人已經向您展示了睡眠示例,但也要考慮您的進程正在等待遠程計算機,其他進程等的響應的真實情況。在等待數據庫查詢時,即使您不使用處理器,wallclock時間也在繼續。

相關問題