johnnywang has asked for the wisdom of the Perl Monks concerning the following question:
It seems timethese() somehow get stuck on the dequeue() call, which is blocking if the queue is empty. It works fine if dequeue() is replaced by dequeue_nb(). But why does it get stuck? I thought timethese() does the testing in sequence, not in parallel, so the second test should be the same as the first two timethis(), what's wrong?use strict; use Thread::Queue; use Benchmark; # this part works fine my $queue = Thread::Queue->new(); timethis(1000, sub{$queue->enqueue(1);}); timethis(1000, sub{$queue->dequeue();}); # this part gets stuck. # but works fine if I change dequeue() to dequeue_nb() my $queue2 = Thread::Queue->new(); timethese(1000, {'Push'=>sub{$queue2->enqueue(1);}, 'Pop'=>sub{$queue2->dequeue();} } );
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Benchmark does timethese() in parallell?
by darrellb (Acolyte) on Nov 06, 2004 at 01:45 UTC | |
|
Re: Benchmark does timethese() in parallell?
by BrowserUk (Patriarch) on Nov 06, 2004 at 02:28 UTC | |
|
Re: Benchmark does timethese() in parallell?
by pg (Canon) on Nov 06, 2004 at 03:00 UTC | |
|
Re: Benchmark does timethese() in parallell?
by Aighearach (Initiate) on Nov 06, 2004 at 01:13 UTC |