我有一个使用Parallel::ForkManager
的脚本。然而,即使所有子进程都已完成,wait_all_children()
过程仍然需要非常长的时间。我知道的方式是通过打印一些时间戳(如下所示)。有人知道可能是什么原因吗?(我的机器上有16个CPU核心)。
my $pm = Parallel::ForkManager->new(16);
for my $i (1..16) {
$pm->start($i) and next;
... do something within the child-process ...
print (scalar localtime), " Process $i completed.\n";
$pm->finish();
}
print (scalar localtime), " Waiting for some child process to finish.\n";
$pm->wait_all_children();
print (scalar localtime), " All processes finished.\n";
显然,我首先会收到“等待某个子进程完成”的消息,时间戳可能是 7:08:35
。然后我会得到一系列“进程 i 已完成”的消息,最后一个消息的时间戳是 7:10:30
。然而直到 7:16:33
(!)我才收到“所有进程已完成”的消息。为什么在 7:10:30
和 7:16:33
之间会有 6 分钟的延迟呢?谢谢!