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模块,我也不能使用线程。
请介绍一下如何实施......
答案 0 :(得分:2)
您的问题似乎是
出于学术目的,我想学习如何使用
fork
。我该怎么做?
像Parallel :: ForkManager这样的模块是这样编写的,所以你不必直接使用fork
,因为它可能很棘手。如果您想知道如何使用fork
,那么您应该学习Parallel::ForkManager。这里复制太大了。
请注意,fork
,wait
和waitpid
转换为具有相同名称的系统调用,因此您应该熟悉man 2 fork
,{{ 1}}和man 2 wait
。
perlipc也可能有用。
答案 1 :(得分:1)
如果你不能使用线程而你不能使用分叉模块,那么唯一合理的解决方案就是你打算手动使用fork()
将你的进程分成多个进程。不幸的是,管理由此产生的子进程可能非常棘手,这就是编写Parallel::ForkManager
之类的模块的原因 - 但如果您对UNIX编程感兴趣,了解正在发生的事情是很有价值的。
我假设这些限制是因为这是家庭作业或其他一些学术活动,所以如果他们真的希望你学习分叉,这些限制是合适的。