【发布时间】:2014-12-11 20:19:23
【问题描述】:
我需要帮助将嵌套的 for 循环转换为 Perl 中的多线程程序,例如
for ( my $i=0; $i<100; $i++) {
for ( my $j=0; $j<100; $j++ ) {
for ( my $k=0; $k<100; $k++ ) {
#do something ....
}
}
}
有没有办法可以将第一个循环拆分如下并并行运行
#Job1:
for ( my $i=0; $i < 40; $i++) {
for( my $j=0; $j < 100; $j++) {
for( my $k=0; $k < 100; $k++) {
#do something ....
}
}
}
#Job2:
for ( my $i=40; $i < 80; $i++) {
for( my $j=0; $j<100; $j++) {
for( my $k=0; $k<100; $k++) {
#do something ....
}
}
}
#Job3
for ( my $i=80; $i < 100; $i++) {
for( my $j=0; $j < 100; $j++) {
for( my $k=0; $k < 100; $k++) {
#do something ....
}
}
}
如何才能并行运行每个程序,然后只有当所有子程序Job1,Job2和job3都完成时才退出主程序。
【问题讨论】:
-
循环执行块是否相互依赖?还是顺序无关紧要?即,如果您在 i=3 的块之前执行 i=5 的块,这对您来说很重要还是一样?这个问题直接影响解决方案
-
我会选择
Parallel::ForkManager,因为这看起来隐含并行。 -
我可以按任何顺序运行循环,只有它们应该成功运行,然后只有主程序应该退出
标签: multithreading perl