-3
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.

例如:我正在从远程 machine1 复制到 DIR1 .....从 machine50 到 DIR50 所以我总共分别从 50 台机器复制到 50 个目录。然后它为所有 50 个目录生成 gcov。

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

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

请给出一些想法我该如何实施......

4

2 回答 2

2

你的问题似乎是

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

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

请记住fork,waitwaitpid同名的系统调用,所以你应该熟悉man 2 fork,man 2 waitman 2 waitpid

perlipc也可能有用。

于 2013-04-09T13:01:36.040 回答
1

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

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

于 2013-04-09T12:06:03.407 回答