2009-11-12 73 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时间也在继续。

相关问题