在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