并行处理数组

时间:2015-09-17 14:26:16

标签: perl

sub parallelizing{
  my counter = 0; 
  my $MAX_PROCESS = 10;
  my $workerQueue = Parallel::ForkManager->new($MAX_PROCESS);

  $workerQueue->start and next;
    print "$process #" . $counter . " started\n";
    $counter = $counter +1
  $workerQueue->finish;
}

我正在使用Parallel::ForkManager来创建共享变量$counter的子进程,但事实证明它不是共享的。有没有办法让子进程共享变量?

1 个答案:

答案 0 :(得分:0)

简短回答 - 不,不是这样。 fork创建一个单独的流程实例,具有自己的内存状态。它实现了copy-on-write机制(通常),因此非常有效。但是流程无法轻易共享内存。

然而,您可以执行threads::shared之类的操作来创建线程;共享变量可由多个东西访问。 (虽然我通常建议使用Thread::Queue代替)。

这样的事情: Perl daemonize with child daemons 可能会提供一些有用的例子。