############################################################ # # ithreads on Centos Linux, 64 bit, 8 CPU's # Perl v5.10.1 built for x86_64-linux-thread-multi # Threads Clock CPU ==> Speed Overhead # ------- ----- ---- ----- -------- # 1 18.2 18.2 ==> 1.0x 0% # 2 9.1 18.2 ==> 2.0x 0% # 3 6.2 18.3 ==> 2.9x 1% # 5 3.7 18.2 ==> 4.9x 0% # 8 2.4 18.4 ==> 7.6x 1% # # ithreads on my Windows 7, 64 bit, 8 CPU's # Perl v5.12.3 built for MSWin32-x86-multi-thread # Threads Clock CPU ==> Speed Overhead # ------- ----- ---- ----- -------- # 1 25.0 25.0 ==> 1.0x 0% # 2 14.6 28.1 ==> 1.7x 12% # 3 12.9 37.0 ==> 1.9x 48% # 5 9.9 47.8 ==> 2.5x 91% # 8 8.2 62.1 ==> 3.0x 148% # ############################################################ #### use strict; use warnings; use threads; use Time::HiRes 'time'; my $nr_children = 1; my @threads; my $start = time; foreach my $i (1 .. $nr_children) { $threads[$i] = threads->create(\&Work, $i); } foreach my $i (1 .. $nr_children) { $threads[$i]->join(); } my $stop = time - $start; printf "\nclock: %.1f sec\n", $stop; my @run = times; printf "user: %.1f sec\n", $run[0]; exit; ##### sub Work { my ($i) = @_; foreach ( 1 .. (20e5/$nr_children) ) { my $acct_nrs = "abc\txyz\tdef\tabc\tghi\tghi"; my @temp = split(m/\t/, $acct_nrs, -1); @temp = ( sort keys %{{ map { $_ => 1 } @temp }} ); my $ans = join(', ', @temp); } print " $i"; return; }