unless (fork)
{
# This assigns the worker 1 of 10 data channels in a
# round-robin fashion for the life of the worker.
MCE::Shared->init();
do_subroutine ();
exit;
}
####
use strict;
use warnings;
use MCE::Shared;
use Time::HiRes 'time';
my $number = MCE::Shared->scalar(0);
sub do_subroutine { $number->incr for 1..1e5; }
my @pids;
my $start = time;
for (1..10) {
my $pid;
unless ($pid = fork) {
do_subroutine ();
exit;
}
push @pids, $pid if defined $pid;
}
waitpid $_, 0 for @pids;
printf "number %d\n", $number->get;
printf "seconds %.03f\n", time - $start;
__END__
number 1000000
seconds 5.234
##
##
use strict;
use warnings;
use MCE::Shared;
use Time::HiRes 'time';
my $number = MCE::Shared->scalar(0);
sub do_subroutine { $number->incr for 1..1e5; }
my @pids;
my $start = time;
for (1..10) {
my $pid;
unless ($pid = fork) {
MCE::Shared->init; # enables multi-channel
do_subroutine ();
exit;
}
push @pids, $pid if defined $pid;
}
waitpid $_, 0 for @pids;
printf "number %d\n", $number->get;
printf "seconds %.03f\n", time - $start;
__END__
number 1000000
seconds 2.086
##
##
use strict;
use warnings;
use threads;
use MCE::Shared;
use Time::HiRes 'time';
my $number = MCE::Shared->scalar(0);
my $start = time;
sub do_subroutine { $number->incr for 1..1e5; }
threads->create('do_subroutine') for 1..10;
$_->join for threads->list;
printf "number %d\n", $number->get;
printf "seconds %.03f\n", time - $start;
__END__
number 1000000
seconds 2.142
##
##
use strict;
use warnings;
use MCE::Hobo;
use MCE::Shared;
use Time::HiRes 'time';
my $number = MCE::Shared->scalar(0);
my $start = time;
sub do_subroutine { $number->incr for 1..1e5; }
MCE::Hobo->create('do_subroutine') for 1..10;
$_->join for MCE::Hobo->list; # same as MCE::Hobo->wait_all
printf "number %d\n", $number->get;
printf "seconds %.03f\n", time - $start;
__END__
number 1000000
seconds 2.087