#! perl -slw
use strict;
use threads;
use threads::shared;
use Thread::Queue;
use Time::HiRes qw[ time sleep ];
my $dqd :shared = 0;
my $nqd :shared = 0;
my $Q = new Thread::Queue;
my $start = time;
async {
while( $Q->dequeue ) {
++$dqd;
}
}->detach;
async {
for ( 1 .. 1e6 ) {
$Q->enqueue( $_ );
++$nqd;
}
}->detach;
while( sleep 0.1 and $dqd < 1e6 ) {
my $e = time - $start;
printf STDERR "\rn;%7d (%.3f/s) d:%7d (%.3f/s)",
$nqd, $nqd / $e, $dqd, $dqd / $e;
}
####
C:\test>junk73
n;1000000 (44406.955/s) d: 994850 (44178.215/s)
Elapsed: 22.619 seconds
####
C:\test>perl -MTime::HiRes=time -e"BEGIN{$t=time()}" -nE"say;}{ warn time() -$t" phrases.small >out.txt
0.944000005722046 at -e line 2, <> line 1000000.
####
C:\test>perl -MTime::HiRes=time -e"BEGIN{$t=time()}" -nE"}{ warn time() -$t" phrases.small
0.388376951217651 at -e line 2, <> line 1000000.
####
Firstly, 32-bit perl 5.12.3 on Windows:
C:\_32\pscrpt>perl buk.pl -T=1 phrases.small >out.txt
Started Thu Mar 24 04:52:24 2011
1000000 14225.3834185375 at buk.pl line 30, <> line 1000000.
Ended Thu Mar 24 04:53:40 2011
C:\_32\pscrpt>perl buk.pl -T=2 phrases.small >out.txt
Started Thu Mar 24 04:54:03 2011
1000000 12605.8696080362 at buk.pl line 30, <> line 1000000.
Ended Thu Mar 24 04:55:22 2011
C:\_32\pscrpt>perl buk.pl -T=3 phrases.small >out.txt
Started Thu Mar 24 04:55:54 2011
1000000 12348.060968551 at buk.pl line 30, <> line 1000000.
Ended Thu Mar 24 04:57:15 2011
C:\_32\pscrpt>perl buk.pl -T=4 phrases.small >out.txt
Started Thu Mar 24 04:57:43 2011
1000000 12225.405921681 at buk.pl line 30, <> line 1000000.
Ended Thu Mar 24 04:59:05 2011
And, with 32-bit perl-5.10.something on linux:
[rob@localhost pscrpt]$ /home/rob/perl510-multi/bin/perl buk.pl -T=1 p
+hrases.small >out.txt
Started Thu Mar 24 05:03:23 2011
1000000 8861.7641709435231 at buk.pl line 30, <> line 1000000.
Ended Thu Mar 24 05:05:23 2011
[rob@localhost pscrpt]$ /home/rob/perl510-multi/bin/perl buk.pl -T=2 p
+hrases.small >out.txt
Started Thu Mar 24 05:05:47 2011
1000000 5387.58673401599584 at buk.pl line 30, <> line 1000000.
Ended Thu Mar 24 05:08:53 2011
[rob@localhost pscrpt]$ /home/rob/perl510-multi/bin/perl buk.pl -T=3 p
+hrases.small >out.txt
Started Thu Mar 24 05:09:11 2011
1000000 4805.8109482304384 at buk.pl line 30, <> line 1000000.
Ended Thu Mar 24 05:12:40 2011
[rob@localhost pscrpt]$ /home/rob/perl510-multi/bin/perl buk.pl -T=4 p
+hrases.small >out.txt
Started Thu Mar 24 05:14:26 2011
1000000 4558.58825262797919 at buk.pl line 30, <> line 1000000.
Ended Thu Mar 24 05:18:05 2011