如何在perl中实现并行处理?

时间:2013-04-09 11:58:49

标签: perl

I have written a perl script which does the following things sequentially,
1.Copying .gcda files from other 50 remote machines to my home dir.
2.It generates GCOV
3.Merge the GCOV files

  As i mentioned above it is working sequentially and it takes more than an hour to complete the task.But i want to execute these steps in parallel.

对于Ex:我正在从远程machine1复制到DIR1 .....从machine50到DIR50  所以我完全是从50台机器复制到50台目录。 然后它为所有50个目录生成gcov。

我目前的要求是,一旦我从机器1复制,我应该开始并行生成gcov,在为2个目录生成gcov之后我需要开始合并。

但是,我不想使用Parallel :: ForkManager模块,我也不能使用线程。

请介绍一下如何实施......

2 个答案:

答案 0 :(得分:2)

您的问题似乎是

  

出于学术目的,我想学习如何使用fork。我该怎么做?

像Parallel :: ForkManager这样的模块是这样编写的,所以你不必直接使用fork,因为它可能很棘手。如果您想知道如何使用fork,那么您应该学习Parallel::ForkManager。这里复制太大了。

请注意,forkwaitwaitpid转换为具有相同名称的系统调用,因此您应该熟悉man 2 fork,{{ 1}}和man 2 wait

perlipc也可能有用。

答案 1 :(得分:1)

如果你不能使用线程而你不能使用分叉模块,那么唯一合理的解决方案就是你打算手动使用fork()将你的进程分成多个进程。不幸的是,管理由此产生的子进程可能非常棘手,这就是编写Parallel::ForkManager之类的模块的原因 - 但如果您对UNIX编程感兴趣,了解正在发生的事情是很有价值的。

我假设这些限制是因为这是家庭作业或其他一些学术活动,所以如果他们真的希望你学习分叉,这些限制是合适的。