#!/usr/bin/perl -w # Construction using the Core API use 5.030; # goto YA; use MCE; my @c = (); my $t0 = time(); my $kount; my $mce = MCE->new( max_workers => 16, user_func => sub { my ($mce) = @_; $kount++; mysub($kount) for (1 .. 100_000_000); $mce->say(__LINE__ ." $kount $c[$kount]: Hello from " . $mce->wid); } ); $mce->run; say __LINE__ ." Time elapsed ", time()-$t0, " secs."; no MCE; YA: # $SIG{CHLD} = "IGNORE"; use Parallel::ForkManager; my $pm = Parallel::ForkManager->new(16); @c = (); my $t1 = time(); $kount = 0; my %h; DATA_LOOP: # foreach my $data (@all_data) { while ($kount < 16){ # Forks and returns the pid for the child: $kount++; my $pid = $pm->start and next DATA_LOOP; $h{$pid}++; mysub($kount) for (1 .. 100_000_000); say(__LINE__ ." $kount $c[$kount]: Hello from " . $pid . " $h{$pid}"); # ... do some work with $data in the child process ... $pm->finish; # Terminates the child process } $pm->wait_all_children; say __LINE__ ." Time elapsed ", time()-$t1, " secs."; exit 1; sub mysub { my $k = shift; $c[$k]++; ; }