perl並列処理

threads

use strict;
use warnings;
use threads;

my $thr1 = threads->create(\&sub1,"yasai","kudamono");
my $thr2 = threads->create(\&sub1,"daikon","apple");
my @ReturnData1 = $thr1->join();
my @ReturnData2 = $thr2->join();
print("thread 1 returned ", join(', ', @ReturnData1), "\n");
print("thread 2 returned ", join(', ', @ReturnData2), "\n");
print("exit\n");

sub sub1(){
  my ($data1, $data2) = @_;
 
  for(1..3){
    print("$data1 - $data2\n");
    threads->yield(); # CPUを他のスレッドに明け渡す
    sleep 1;
  }
} 

Parallel::ForkManager

use strict;
use warnings;
use Parallel::ForkManager;

my @datas = ("1","2","3","4");
my $pm = new Parallel::ForkManager(10);

foreach my $data (@datas){
  $pm->start() and next;
    
   #分岐処理をここに記述
   for (1..100){
      print($data."\n");
   }  
  
  $pm->finish();
}

$pm->wait_all_children;