摘要
当我使用Perl的Benchmark实用程序执行一个非常简单的程序时.我得到的值不是(显示为)毫秒或纳秒.返回的基准数据对我没用,因为我不知道如何解释它.
例:
use Benchmark; my $start = Benchmark->new; print "foo!"; my $end = Benchmark->new; my $diff = timediff($end,$start); print timestr($diff);
返回:foo! 0 wallclock secs(0.00 usr 0.00 sys = 0.00 cpu)
不同的字段意味着什么:Wallclock秒,Usr,Sys,cpu?它们可以外推得到毫秒值吗?现在,对于我的基准测试,我需要的只是一次执行的真实世界时间,而不需要考虑基准测试的一些更深奥的方面.
解决方法
Wallclock秒是实际经过的时间,就像你看着你的手表计时一样.
在user space中实际花费在cpu上的时间的usr秒.
sys seconds是在内核空间中实际花费在cpu上的时间.
但是,一旦掌握了所有这些,就必须弄清楚实际上要测量的是什么. Benchmark模块仅对您在本地计算机上执行的操作进行计时.如果必须在远程计算机(例如数据库服务器或Web服务器)上启动进程,则这些计算机的cpu时间不是结果的一部分.但是,等待响应的时间是挂钟时间的一部分.
你的结果表明,一切都在瞬间发生.你需要更丰富的东西,所以它需要一些时间.如果您只需要一次运行的挂钟时间,则根本不需要使用Perl.使用命令行中的times实用程序.
我在Mastering Perl中进行了相当广泛的讨论并进行了一些基准测试.然而,就在本周,我认为Benchmark模块已经过时了. SteffenMüller的Dumbbench做得更好.请参阅blogs.perl.org的dumbbench博客文章.