#!/usr/bin/perl use strict; use warnings; my $perl = "/opt/perl/bin/perl"; my $thrperl = "/opt/perl/bin/thrperl"; my $action = << '--'; open my $fh => "> /dev/null" or die "open: $!"; print $fh "."; close $fh; -- my $prog = << '--'; use strict; use warnings; my $times = shift; my @pids; foreach (1 .. $times) { defined (my $pid = fork) or die "fork: $!"; unless ($pid) { ACTION; exit; } push @pids => $pid; } map {waitpid $_ => 0} @pids; -- my $thrprog = << '--'; use strict; use warnings; use threads; my $times = shift; my @threads; foreach (1 .. $times) { my $thread = threads -> create (sub {ACTION}) or die "threads: $!"; push @threads => $thread; } map {$_ -> join} @threads; -- my @amounts = (0, 5, 10, 25, 50, 100, 250, 500, 1000, 2500); print STDERR "Empty childs\n"; (my $t_prog = $prog) =~ s/ACTION//; (my $t_thrprog = $thrprog) =~ s/ACTION//; for my $amount (@amounts) { my $format = sprintf "%5d: %%U user, %%S system, %%E elapsed" => $amount; system time => '-f', "(F) $format", $perl, '-e', $t_prog, $amount; system time => '-f', "(T) $format", $thrperl, '-e', $t_thrprog, $amount; } print STDERR "\nChilds writing\n"; ($t_prog = $prog) =~ s/ACTION/$action/; ($t_thrprog = $thrprog) =~ s/ACTION/$action/; for my $amount (@amounts) { my $format = sprintf "%5d: %%U user, %%S system, %%E elapsed" => $amount; system time => '-f', "(F) $format", $perl, '-e', $t_prog, $amount; system time => '-f', "(T) $format", $thrperl, '-e', $t_thrprog, $amount; } __END__ Empty childs (F) 0: 0.01 user, 0.00 system, 0:00.01 elapsed (T) 0: 0.04 user, 0.00 system, 0:00.03 elapsed (F) 5: 0.01 user, 0.00 system, 0:00.01 elapsed (T) 5: 0.09 user, 0.00 system, 0:00.09 elapsed (F) 10: 0.01 user, 0.01 system, 0:00.02 elapsed (T) 10: 0.16 user, 0.00 system, 0:00.15 elapsed (F) 25: 0.01 user, 0.02 system, 0:00.03 elapsed (T) 25: 0.32 user, 0.02 system, 0:00.34 elapsed (F) 50: 0.03 user, 0.04 system, 0:00.06 elapsed (T) 50: 0.60 user, 0.08 system, 0:00.70 elapsed (F) 100: 0.04 user, 0.08 system, 0:00.11 elapsed (T) 100: 1.25 user, 0.11 system, 0:01.42 elapsed (F) 250: 0.04 user, 0.12 system, 0:00.50 elapsed (T) 250: 3.41 user, 0.24 system, 0:03.87 elapsed (F) 500: 0.02 user, 0.14 system, 0:01.16 elapsed (T) 500: 7.37 user, 0.55 system, 0:08.42 elapsed (F) 1000: 0.05 user, 0.19 system, 0:02.49 elapsed A thread exited while 46 threads were running. (T) 1000: 15.02 user, 1.36 system, 0:17.42 elapsed (F) 2500: 0.04 user, 0.71 system, 0:06.73 elapsed Command terminated by signal 9 (T) 2500: 37.39 user, 3.30 system, 2:10.56 elapsed Childs writing (F) 0: 0.06 user, 0.21 system, 0:01.60 elapsed (T) 0: 0.20 user, 0.23 system, 0:01.66 elapsed (F) 5: 0.01 user, 0.01 system, 0:00.03 elapsed (T) 5: 0.12 user, 0.02 system, 0:00.28 elapsed (F) 10: 0.03 user, 0.00 system, 0:00.07 elapsed (T) 10: 0.17 user, 0.04 system, 0:00.37 elapsed (F) 25: 0.02 user, 0.06 system, 0:00.08 elapsed (T) 25: 0.49 user, 0.09 system, 0:01.07 elapsed (F) 50: 0.04 user, 0.21 system, 0:00.46 elapsed (T) 50: 0.73 user, 0.12 system, 0:01.72 elapsed (F) 100: 0.04 user, 0.11 system, 0:00.14 elapsed (T) 100: 1.22 user, 0.06 system, 0:01.29 elapsed (F) 250: 0.08 user, 0.12 system, 0:00.52 elapsed (T) 250: 2.93 user, 0.30 system, 0:04.29 elapsed (F) 500: 0.06 user, 0.20 system, 0:01.30 elapsed (T) 500: 6.29 user, 0.67 system, 0:07.79 elapsed (F) 1000: 0.03 user, 0.24 system, 0:02.50 elapsed A thread exited while 46 threads were running. (T) 1000: 11.52 user, 1.46 system, 0:13.84 elapsed (F) 2500: 0.06 user, 0.72 system, 0:06.78 elapsed Command terminated by signal 9 (T) 2500: 26.72 user, 13.98 system, 3:57.20 elapsed