perl中并行性的两个主要来源是线程
在使用Parallel::ForkManager时,我几乎没有什么疑问。就像我在for循环中调用子进程一样,那么谁将执行下一条语句,父语句还是子语句。代码:
my $pm = Parallel::ForkManager->new($forks); foreach my $q (@numbers) {
my $pid = $pm->start and next;
my $res = calc($q);
if($res == error )
{return};
if (#res == some_no)
{do something and next;
}
$pm->finish(0, { result => $res, input => $q });
}。。。。我想知道fork返回输出,并希望父进程执行1st-next和2nd-next。还想知道如果子进程在中间结束,家长会知道吗?
use threads;
和forking。对于后者,Parallel::ForkManager
可能是最好的选择。
但是,对于复制?这可能没有你想象的那么有帮助。你的限制因素不是CPU,而是IO到磁盘。
并行IO并没有你想象的那么有帮助,而且在许多情况下可能会适得其反——通过使磁盘颠簸,必须写入两个位置,你会降低总体吞吐量。