#! perl -slw use strict; use Time::HiRes qw[ time ]; use threads; use Thread::Queue; our $T //= 10; our $N //= 100; our $I //= 1e4; my $Q = new Thread::Queue; my @threads = map async{ while( my $item = $Q->dequeue ) { my @a = split $;, $item; } }, 1 .. $T; my $start = time(); my @a = 1.. $N; for( 1 .. $I ) { $Q->enqueue( join $;, @a ); } $Q->enqueue( (undef) x @threads ); $_->join for @threads; printf "Took %.6f seconds\n", time() - $start; print join ' ', times;