#!/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]++;
    ;
}

