http://www.perlmonks.org?node_id=1027581

bluescreen has asked for the wisdom of the Perl Monks concerning the following question:

Hi, Monks

I'm trying to measure to different programs and I came across to some odd results when using Benchmarks, here's the code and the results

use Time::HiRes qw(time); use Benchmark qw(:hireswallclock cmpthese); cmpthese(5, { a => sub { sleep 4 }, b => sub {sleep 6} });' # (warning: too few iterations for a reliable count) # (warning: too few iterations for a reliable count) # Rate a b #a 5000000000000000/s -- 0% #b 5000000000000000/s 0% --

What seems to be very strange is:

I know I may be doing something wrong, but I dont know why

Replies are listed 'Best First'.
Re: Strange behavior with Benchmark
by aitap (Curate) on Apr 08, 2013 at 20:28 UTC

    This is because speed computations are done by CPU time, and a program doesn't use any CPU time while sleeping. Moreover, "real" (CPU + "other things") time is computed using time(2) and thus is measured in seconds, not any more precisely.

    You can still try to count the real execution time by using timeit and its returned Benchmark object:

    use Benchmark; use feature 'say'; say timeit(5, sub { sleep 4 })->real; say timeit(5, sub { sleep 6 })->real;